c - 在 C + Win API 中编程 : How To Get Windows 7 Look For Controls?

标签 c windows winapi button visual-styles

我严格使用 C 和 WinAPI 编程,不使用 C++ 或 C#。我是初学者,刚刚学习绘制控件等。问题是,当我创建 Windows 或其他控件(如命令按钮)时,它们具有 Windows Native 外观。看看这个:

This is look I am getting!

但在 Windows 7 中,命令按钮如下所示:

enter image description here

现在,如何让我的程序中的命令按钮看起来像那样。有可能吗? 我正在学习本教程,以供引用: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/

相关文章:

mysql - 如何作为 (Windows) 客户端连接到 mySQL 数据库?

c# - OpenGL/DirectX Hook - 类似于 FRAPS

python - 在 bash 中使用 NULL 字节(缓冲区溢出)

python - 我无法打开manage.py

c - 将指针传递给函数异常

Python:用土耳其语字母阅读和打印土耳其语的问题

python - 为什么此代码对 NULL 句柄调用 CloseHandle?

C - WinAPI - 向线程发送消息并等待它

c - 关于 C 中可变内存地址的观察

c - 带 C 的简单 I/O 功能