【笔记】应用程序中使用系统主题外观


【转载】VC++6.0 MFC应用程序使用XP主题外观

一、实现原理

  微软为Windows XP提供了Themes服务。Themes可以让程序具有“XP风格”,看起来更美观,因为微软更新了Comctl32.dll(ver 6.0)这个“XP风格”的控件。微软还为了保留传统的Windows界面风格,特地留下了Comctl32.dll v5.8。VC6的推出时间早于WinXP,因此VC6的程序默认是不使用“xp风格”的。
程序使用xp风格主要是内置了manifest这东东。因此只要让VC6的程序中包含即可。包含可以外置,也可以内置为资源。

二、实现方法

1.打开你的VC6 工程,找到资源试图(ResourceView),然后在视图中的树的根结点上点鼠标右键,选择菜单“插入(Insert)”。
2.在弹出的“插入资源(Insert Resource)”对话框中选择“Custom”,在新对话框(“NewCustom Resource”)输入框中输入24。 因为manifest的类型是24, 点击“OK”按钮。
3.在资源视图的树上面选择24下方的条目“DDR_DEFAULT1”上点右键,选择“Properties”,将ID:修改为1.
4.双击刚才修改的“1”条目,然后在右方的编辑器窗口中输入下面的代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="Company.Product.Name"
    type="win32"
/>
<description></description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

5.保存工程,重新编译

--【转帖收藏】原文出处不详

Note:并非只是MFC程序才这么做,所有Win32窗口程序要使用XP主题风格都可以这样来导入manifest文件;如果用这种方法,VStudio对文件的后缀稍微有所挑剔了,必须以manifest作为文件后缀导入到资源中。当然,还有个更加方便的方法,直接在工程的预处理文件中添加以下预处理代码:

#if defined _M_IX86
  #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
  #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
  #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
  #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

其实,这两种方式的实现方法都是一样的,具体可以参见MSDN。第一个方法是手动完成的,第二个方法则是交由预处理指令去自动完成的。

--克劳德曼

2012-8-6 15:41:15

优质内容筛选与推荐>>
1、HDU2549壮志难酬
2、Mapreduce程序中reduce的Iterable参数迭代出是同一个对象
3、特立独行一代:深度解读95后互联网生活方式
4、TheQuoraTopicNetwork(上)
5、大数据人工智能词汇索引TUVWXYZ大数据人工智能词汇索引


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn