我严格使用 C 和 WinAPI 编程,不使用 C++ 或 C#。我是初学者,刚刚学习绘制控件等。问题是,当我创建 Windows 或其他控件(如命令按钮)时,它们具有 Windows Native 外观。看看这个:
但在 Windows 7 中,命令按钮如下所示:
现在,如何让我的程序中的命令按钮看起来像那样。有可能吗? 我正在学习本教程,以供引用:http://zetcode.com/gui/winapi/
谢谢。
最佳答案
这就是控件在 1990 年代的样子,在主题(视觉样式)被发明之前。正如你所注意到的,现代纽扣现在被涂上了所有带有渐变和跳动等等的花式裤子。但是出于向后兼容的原因,您必须特别要求您的控件得到那种处理,否则它们将回退到旧样式。
您可以通过指定 list 来做到这一点。您可以将一个纯文本格式的文件添加到应用程序的根目录,也可以让 Visual Studio(2005 及更高版本)自动将一个文件嵌入到您的 EXE 中。
第二条路线是我要走的路。将以下代码添加到您的 stdafx.h
文件,以通知编译器您希望它在构建项目时自动添加 list :
#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?再次出于向后兼容的原因。细节很无聊。 :-)
关于c - 在 C + Win API 中编程 : How To Get Windows 7 Look For Controls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663091/