目前共有23篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:大陆简体▼
 
点击 回复
1602 22
【教程】让Win32程序拥有XP风格控件
一派掌门 二十级
1楼 发表于:2015-4-4 12:44
在Visual Studio中,默认创建的Win32 Project的对话框中,控件是Windows 2000风格的,很难看。


本教程主要讨论如何让Win32程序的控件拥有XP风格。最终效果如图:

(说实话我也不知道对话框中为何多出了一个α的图标。。。)
一派掌门 二十级
2楼 发表于:2015-4-4 12:46
【第一步】
打开Win32Project1.cpp文件(新建的工程貌似只有一个cpp文件),在这个文件的头部加上:
#pragma comment (lib, "comctl32.lib")
#include "commctrl.h"

其中最后一个也可以写成#include <commctrl.h>
 
一派掌门 二十级
3楼 发表于:2015-4-4 12:48
找到InitInstance函数,在函数中加入
InitCommonControls();
如图:

那个注释是我加上的= =
//Make sure this is here so you can use XP Styles
这个可以不加的。
 
一派掌门 二十级
4楼 发表于:2015-4-4 13:17
【第二步】
打开Win32Project1.rc文件

新建一个资源
 
一派掌门 二十级
5楼 发表于:2015-4-4 13:21
点Custom按钮

输入24,然后点OK
 
一派掌门 二十级
6楼 发表于:2015-4-4 13:22
在新建的空白文件中,粘贴如下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    name="Microsoft.Windows.Shell.notepad"
    processorArchitecture="amd64"
    version="5.1.0.0"
    type="win32"/>
<description>Windows Shell</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
</application>
</assembly>


 
一派掌门 二十级
7楼 发表于:2015-4-4 13:24

然后在右下角的Properties(属性)模块中,把ID改成1,把Filename改成“工程名.manifest”,如:Win32Project1.manifest
 
一派掌门 二十级
8楼 发表于:2015-4-4 13:28
回复:7楼
注意:
这一步是先点击了(6楼所示截图)刚才新建的那个资源的内容区域,使光标落在那个区域之后,再到Properties(属性)模块中修改属性值。

当然也可以 选中 Resource View中的RT_MANIFEST(或24)下新建的资源,再在属性模块中改。反正目的是要把文件名改成“工程名.manifest”,资源名称改成1

 
一派掌门 二十级
9楼 发表于:2015-4-4 13:28
然后运行程序就行了。
 
一派掌门 二十级
10楼 发表于:2015-4-4 13:30
 
一派掌门 二十级
11楼 发表于:2015-4-4 13:34
对于MFC程序,从VS2005开始就已自动启用了XP控件风格,无需用户干预。
而在VC6中,则只需要新建一个24资源,复制6楼所述内容,然后把资源ID改为1就行了。不需要加入其它的C++代码。
 
一派掌门 二十级
12楼 发表于:2015-4-4 13:44

对话框中的控件可以直接在rc文件中的dialog资源中添加。
 
一派掌门 二十级
13楼 发表于:2015-4-4 13:45
 
一派掌门 二十级
14楼 发表于:2015-4-4 13:46
1>------ Build started: Project: Win32Project1, Configuration: Release Win32 ------
1>  stdafx.cpp
1>  Win32Project1.cpp
1>  Generating code
1>  Finished generating code
1>  Win32Project1.vcxproj -> f:\users\octopus\documents\visual studio 2013\Projects\Win32Project1\Release\Win32Project1.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

生成Release版本的exe文件。。。
 
一派掌门 二十级
15楼 发表于:2015-4-4 14:06

该方法在VS2010中也适用。
 
一派掌门 二十级
16楼 发表于:2015-4-4 14:11

这是在没有安装VS的电脑上运行的效果。
 
一派掌门 二十级
17楼 发表于:2015-4-4 14:28

回复:15楼

如果觉得字体不好看,可以改成“新宋体”

 
一派掌门 二十级
18楼 发表于:2015-4-4 20:08
其实,我VS2005,2008,2010,2013都用过。。。。
 
一派掌门 二十级
19楼 发表于:2015-12-1 22:38

回复:2楼

comment和括号中间可以不需要空格。

 
一派掌门 二十级
20楼 发表于:2015-12-3 22:35
回复7楼 @巨大八爪鱼 的内容:
然后在右下角的Properties(属性)模块中,把ID改成1,把Filename改成“工程名.manifest”,如:Win32Project1.manifest
【补充】
如果实在想用IDR_RT_MANIFEST1作资源ID,那就必须把对应的宏定义值改为1。

 
一派掌门 二十级
21楼 发表于:2015-12-3 22:38

在Resource.h中修改资源ID也是可以的。
 
一派掌门 二十级
23楼 发表于:2015-12-3 22:59
http://www.bianceng.cn/Programming/cplus/201306/36676.htm
在这篇文章里介绍了另一种启用XP风格控件的方法,貌似说的是不需要24资源的XML文件。

 
一派掌门 二十级
26楼 发表于:2015-12-5 14:46
另一种更简单的方法:
【教程】用三行C++代码让Win32程序拥有XP风格控件,无需manifest文件或24资源
https://zh.arslanbar.net/post.php?t=23522
 

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:1602 回复数:22
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-12-5 14:46
精品区:未分类
 
©2010-2025 Purasbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。