这就是 1990 年代控件在主题(视觉样式)发明之前的样子。正如你所注意到的,现代纽扣现在都被涂上了带有渐变和跳动的花哨的裤子等等。但出于向后兼容的原因,您必须明确要求您的控件得到这种处理,否则它们将退回到旧样式。
您可以通过指定清单来做到这一点。您可以将一个纯文本格式的文件添加到应用程序的根目录中,也可以让 Visual Studio(2005 及更高版本)自动在您的 EXE 中嵌入一个。
第二条路线是我要走的路。将以下代码添加到您的 stdafx.h 文件中,以通知编译器您希望它在构建项目时自动添加清单:
#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
This MSDN article 提供的有关视觉样式的信息比您想象的要多。
如果您真的希望您的应用程序看起来像原生,您需要更改用于主窗口的背景画笔。默认情况下,它设置为使用与文本框背景相同的颜色(白色)。
您想改用用于绘制 3D 控件的颜色。修改WNDCLASS(或WNDCLASSEX)结构的hbrBackground 成员,如下所示:
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
为什么一定要加1?再次出于向后兼容性的原因。细节很无聊。 :-)