VC编写的本地代码程序使用XP Style

只是避免在鱼龙混杂的网络上找到莫名其妙不可靠资料的担忧

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它可能连对话框都不出来了!所以一定要这个啊!我今天解决的一个问题就是因为没有这个……

发表评论