解决带清单文件(manifest)C程序移植到XP时无法显示控件的问题

问题描述:

VS2010编译的带manifest的C窗口程序,在XP上运行无法显示控件


最近在学习纯API Window程序写作,在移植到低版本系统时遇到了问题。


现在把经验总结一下:


1.想要不弹出缺少.dll链接库的框,需要改变 配置属性-C/C++-代码生成-运行库 为 /MT 或 /MTd。

2.不想要“基本款”的丑丑的控件外观,可以链接清单文件(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_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

效果相同。

但是这样在本机可以运行,移植到XP时控件都不显示。解决方案:

(1)加入

#include <CommCtrl.h>

(2)在WM_CREATE处加入

InitCommonControls();

(3)在 工程属性-配置属性-链接器-输入-附加依赖项 中加入 comctl32.lib。

posted @ 2016-01-30 17:08  tomwillow  阅读(54)  评论(0编辑  收藏  举报