OpenThemeData函数可能有哪些类
What are the possible classes for the OpenThemeData function?
我正在尝试调用OpenThemeData(请参阅msdn-OpenThemeData)函数,但我无法确定pszClassList
参数传入的可接受类名。
HTHEME OpenThemeData(
HWND hwnd,
LPCWSTR pszClassList
);
有人能告诉我,我可以传递到该参数中的可接受类名是什么吗?谢谢
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
问题的答案Windows视觉主题:部件和状态库?提供了"Parts and States Explorer"应用程序,您可以在其中浏览和测试大多数样式。
我知道这是一个老问题,但我想给那些从谷歌来这里的人一个最新的答案(2018)。
DavidK的公认答案是,调查文件"AeroStyle.xml";其中定义了主题。此文件是Windows 7 SDK的一部分,但已从Windows 10 SDK中删除,因此接受的答案不再有用。
splash的答案链接到MSDN,其中的主题名称、部分和状态列表非常不完整,并且没有更新。
主题由UxTheme.dll绘制,它从Windows 10上文件夹C:WindowsResourcesThemesAero
中的文件aero.msstyles中读取图像和颜色等。
要查看XYZ.msstyles文件中的类,请使用msstyles。编辑:https://github.com/nptr/msstyleEditor
只有通过正确的窗口句柄,才能获得多个主题。似乎有一种自动机制可以从窗口把手检测控件的类型。如果你传递了错误窗口的句柄,你可能会得到另一个超出预期的主题句柄,甚至NULL
。
微软内部已将所有代码更改为使用OpenThemeDataForDpi()
而不是OpenThemeData()
,因为Windows 10上的每个监视器可能具有不同的分辨率。
我们这里的问题是MSDN中严重缺乏文档,并且缺少一个API函数来枚举所有可用的主题。为微软感到羞耻(再一次)。
您可以查看"AeroStyle.xml",如前一张海报所示,它给出了Vista/Aero的确切列表。然而,如果你想保持安全(你可能做到了),类名通常应该是Windows通用控件的Windows类名。例如,按钮和复选框使用类名"Button"、编辑控件"edit"等。我通常会选择最接近我正在处理的任何自定义元素的控件的类名,并为此使用主题数据。这样,无论用户选择的主题是什么,你都可以获得适用于XP、Vista和(希望如此)Windows7的代码
但是,除非您经常使用原始Win32,否则可能不会直接使用类名创建太多控件。类名在MSDN中分布得相当广泛。一个很好的起点通常是Platform SDK中的"CommCtrl.h"文件,该文件中有很多这样的文件,并且它们总是在MSDN帮助中关于各个通用控件进行描述。您还可以通过在文本编辑器中打开.rc文件来了解对话框是如何在.rc文件中定义的:这些文件包含控件的类名。
类名取决于主题。例如,正如OpenThemeData的文档所述:
Aero主题的类名为定义在AeroStyle.xml中在的Include文件夹中找到Microsoft Windows软件开发工具包(SDK)。
它与Aero无关,Aero甚至在XP上都不存在!请参阅OpenThemeData()的源代码。。
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- 有没有可能有一个只有ADL才能找到的非好友功能
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- std::bind() 参数列表中函子的执行顺序(可能与函数参数的求值顺序无关)
- 是否有函数或公式可以在 c++ 中将字符串"of letters"转换为十六进制
- Winsock2 select():同一个套接字上可能有多个事件吗?
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)
- 是否有函数可以将 base64 字符串解码为张量流 c++ 中的张量
- 打印所有可能有 4 个字母的单词的时间太多
- 使用 gcc 的 -fno-math-errno 可能有什么副作用?
- 您是否有函数(不是随机)来查找随机骰子(从 1 到 6)数字(以 C++ 为单位)
- 长镜头 -- 可能有一个静态类成员,该类成员具有访问非静态成员的 lambda
- 画线不起作用,可能有什么问题?
- 如何在运行时检查 c++11 元组是否有可能的函数应用程序
- realloc C 函数的可能包装函数有什么错误?
- [[noreturn]]函数怎么可能有返回类型
- 在c++中,是否有可能获取函数的返回类型,以便在不调用该函数的情况下声明该变量?
- 从模板类继承,可能有不同的构造函数参数
- 有没有可能从函数中得到sizeof
- OpenThemeData函数可能有哪些类