我正在尝试调用OpenThemeData(请参阅msdn OpenThemeData)函数,但我无法确定pszClassList
参数传递的可接受的类名是什么。
HTHEME OpenThemeData(
HWND hwnd,
LPCWSTR pszClassList
);
有人可以告诉我可以传递给该参数的可接受的类名是什么吗? 谢谢!
答案 0 :(得分:11)
MSDN上的文章Parts and States包含一个显示控件类,部件和状态的表。表格中的值在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 Visual Themes: Gallery of Parts and States?的答案提供了“部件和状态资源管理器”应用程序,您可以在其中浏览和测试大多数样式。
答案 1 :(得分:6)
您可以在“AeroStyle.xml”中查看之前的海报,其中提供了Vista / Aero的精确列表。但是,如果您想要安全地玩(并且您可能这样做),通常,类名应该是Windows公共控件的Windows类名。例如,按钮和复选框使用类名“按钮”,编辑控件“编辑”等。我通常选择最接近我正在处理的任何自定义元素的控件的类名,并使用主题数据。这样,无论用户选择的主题实际是什么,您都可以获得适用于XP,Vista和(希望)Windows 7的代码。
但是,除非你经常使用原始Win32,否则你可能不会直接使用类名做很多控件创建。类名在MSDN中非常自由地散布。一个好的起点通常是Platform SDK中的“CommCtrl.h”文件,它有很多这样的文件,并且它们总是在MSDN帮助中描述各个公共控件。您还可以通过查看.rc文件中的对话框如何在文本编辑器中打开来学习它们:它们包含控件的类名。
答案 2 :(得分:4)
班级名称取决于主题。例如,作为OpenThemeData州的文档:
Aero主题的类名称是 在AeroStyle.xml中定义,即 在Include文件夹中找到 Microsoft Windows软件开发 套件(SDK)。
答案 3 :(得分:2)
我知道这是一个古老的问题,但是我想为来自Google的那些人提供最新答案(2018年)。
DavidK接受的答案是说要搜索定义主题的文件“ AeroStyle.xml ”。该文件是Windows 7 SDK的一部分,但已从Windows 10 SDK中删除,因此接受的答案不再有用。
初始答案链接到 MSDN ,其中主题名称,部分和状态的列表非常缺乏竞争性,并且没有更新。
主题是由 UxTheme.dll 绘制的,该文件从Windows文件夹C:\Windows\Resources\Themes\Aero
中的文件 aero.msstyles 中读取图像和颜色等。 10。
但是,当您在十六进制编辑器中打开此文件时,将找不到所有主题的名称。我不知道是否有办法枚举可以传递给OpenThemeData()
的所有现有主题类名称。我想这是不可能的。
但是我确定的是,在Windows 10版本18282中,Microsoft删除了不再使用的主题“ Clock
”,并且添加了许多未记录的主题,例如:“ {{1} }”作为主题类名称传递给TaskBand2CompositedSmallIconsVertical8Light::Taskband2
。
我也知道,只有通过正确的窗口句柄才能获得多个主题。如果您传递了错误的窗口句柄,则可能会获得另一个主题句柄,其超出预期甚至是OpenThemeData()
。
我还知道,在过去的两年中,Microsoft内部对其所有代码进行了更改,以使用NULL
而不是OpenThemeDataForDpi()
,因为Windows 10上的每个显示器可能具有不同的分辨率。
我们这里遇到的问题是MSDN中严重缺乏文档,并且缺少枚举所有可用主题的API函数。
答案 4 :(得分:0)
它与Aero无关,甚至在XP上也不存在! 请参阅OpenThemeData()的源代码..