像楼主的 win7_vc6 里的叫“Old Style”,这是从 Win.2000 开始就存在的。
后面两个看起来舒服一些的叫“XP Style”,顾名思义,这是在 XP 引入主题管理器之后才增加的新的按钮以及一些控件样式,这些样式我们可以通过更改 [Control PanelColors] 来替换成我们想要的颜色,实际上很少被大家使用到,渐渐被大众遗忘了……
鉴于太多 XP 之前的旧系统使用了 Old Style,所以,在 XP 以及之后的操作系统里,默认的 Style 都是 Old Style。这是为了保证兼容性,除非我们显式指定 XP Style。指定的方式如下,
1.纯代码:
#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
从 VC++ 2005 开始之后的 MFC 项目,这段代码都默认被添加到了 stdafx.h 中的,所以也没有过于引人注意。
2.仔细看上段代码就知道,仅仅是针对链接时设置一些参数,所以呢,可以通过
/MANIFESTDEPENDENCY(指定清单依赖项来实现,也可以自己嵌入 .manifast 文件。
总之目的都是一样的。
1) 以上就是针对问题 1 的回答;
2) 这些不是“同一个EXE”,它们链接参数不一样的;
3) 在使用内置控件的前提下,统一样式是做不到的。真想统一,建议使用 DirectUI 吧。