只是避免在鱼龙混杂的网络上找到莫名其妙不可靠资料的担忧
msdn上有,不过临时去翻msdn挺麻烦的,因为没记住在哪个分类里面的话(汗
分类在Windows Desktop App Development——Windows Application UI Development——Windows Controls——Visual Styles——Enabling Visual Styles
然后若遇上网络很慢,要人命
首先是VC2005或以上的解决方法:
直接链接器参数搞起
"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
或者用#pragma加进去
#pragma comment(linker,""/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
然后调用InitCommonControls();,链接到 ComCtl32.lib即可
但是msdn里面专门注明了要vs2005以上。大概以前版本不行吧。
然后就是用manifest清单文件的办法,是一个xml,以资源方式加入:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*' />
</dependentAssembly>
</dependency>
</assembly>
资源类型是24(RT_MANIFEST),
资源id是1(CREATEPROCESS_MANIFEST_RESOURCE_ID)。不是1不知道行不行,也许可以。
然后调用InitCommonControls();,链接到 ComCtl32.lib即可
里面这些YourApplication啥的省略掉它就赫然不能启动了。略烦……不想写的时候就这么留着吗。
2014-1-2添加:链接器如果没有/MANIFEST:NO或者用了/MANIFEST的话,会生成一个manifest文件。如果前面用的是pragma方法,此时可以得到一个小得多的manifest文件。基于此,我把上面那个xml的内容简化成我得到的manifest文件的内容了,本来是例子里的,长不少。
vc6里加入这样的资源,按钮之类的也能出xp style了。目测MinGW GCC下应该也行。
2013-6-5补充:注意啊!不InitCommonControls它可能连对话框都不出来了!所以一定要这个啊!我今天解决的一个问题就是因为没有这个……