Kir*_*ril 11 c++ winapi msdn mfc themes
我正在尝试调用OpenThemeData(参见msdn OpenThemeData)函数,但我无法确定pszClassList
参数传递的可接受的类名是什么.
HTHEME OpenThemeData(
HWND hwnd,
LPCWSTR pszClassList
);
Run Code Online (Sandbox Code Playgroud)
有谁能告诉我可以传递给该参数的可接受的类名是什么?谢谢!
spl*_*ash 11
MSDN上的文章部分和状态包含一个表,其中显示了控件类,部件和状态.在表中的数值中所定义Vsstyle.h
和Vssym32.h
.
这是一个快速参考:
BUTTON, CLOCK, COMBOBOX, COMMUNICATIONS, CONTROLPANEL, DATEPICKER, DRAGDROP,
EDIT, EXPLORERBAR, FLYOUT, GLOBALS, HEADER, LISTBOX, LISTVIEW, MENU, MENUBAND,
NAVIGATION, PAGE, PROGRESS, REBAR, SCROLLBAR, SEARCHEDITBOX, SPIN, STARTPANEL,
STATUS, TAB, TASKBAND, TASKBAR, TASKDIALOG, TEXTSTYLE, TOOLBAR, TOOLTIP,
TRACKBAR, TRAYNOTIFY, TREEVIEW, WINDOW
Run Code Online (Sandbox Code Playgroud)
Windows Visual Themes问题的答案:零件和状态图库?提供"零件和状态资源管理器"应用程序,您可以在其中浏览和测试大多数样式.
小智 6
您可以在"AeroStyle.xml"中查看之前的海报,其中提供了Vista/Aero的精确列表.但是,如果您想要安全地玩(并且您可能这样做),通常,类名应该是Windows公共控件的Windows类名.例如,按钮和复选框使用类名"按钮",编辑控件"编辑"等.我通常选择最接近我正在处理的任何自定义元素的控件的类名,并使用主题数据.这样,无论用户选择的主题实际是什么,您都可以获得适用于XP,Vista和(希望)Windows 7的代码.
但是,除非你经常使用原始的Win32,否则你可能不会直接使用类名做很多控件创建.类名在MSDN中非常自由地散布.一个好的起点通常是Platform SDK中的"CommCtrl.h"文件,它有很多这样的文件,并且它们总是在MSDN帮助中描述各个公共控件.您还可以通过在文本编辑器中打开它们来查看.rc文件中如何定义对话框来学习它们:这些对话框包含控件的类名.
我知道这是一个老问题,但我想为那些从谷歌来到这里的人提供一个更新的答案(2018)。
DavidK 接受的答案说要查看定义主题的文件“ AeroStyle.xml ”。此文件是 Windows 7 SDK 的一部分,但已从 Windows 10 SDK 中删除,因此已接受的答案不再有用。
指向MSDN的初始链接的答案,其中主题名称、部分和状态的列表非常不完整且未更新。
主题由UxTheme.dll绘制,它从Windows 10文件夹中的文件aero.msstyles读取图像和颜色等C:\Windows\Resources\Themes\Aero
。
但是当您在十六进制编辑器中打开此文件时,您将找不到所有主题的名称。我不知道是否有办法枚举所有可以传递给OpenThemeData()
. 我想这是不可能的。
但是我可以肯定的是,在 Windows 10 build 18282 中,Microsoft 删除了Clock
不再使用的主题“ ”,并且添加了许多未记录的主题,例如:“ TaskBand2CompositedSmallIconsVertical8Light::Taskband2
”,它作为主题类名称传递给OpenThemeData()
.
而且我也知道有几个主题只有通过正确的窗口句柄才能获得。如果您传递了错误窗口的句柄,您可能会得到另一个超出预期的主题句柄,甚至NULL
.
我也知道微软在过去 2 年内部已经更改了所有代码以使用,OpenThemeDataForDpi()
而不是OpenThemeData()
因为 Windows 10 上的每个显示器可能具有不同的分辨率。
我们在这里遇到的问题是 MSDN 中严重缺乏文档,并且缺乏枚举所有可用主题的 API 函数。
归档时间: |
|
查看次数: |
6872 次 |
最近记录: |