解决带清单文件(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。