我正在尝试调用OpenThemeData(请参阅msdn OpenThemeData )函数,但我无法确定 pszClassList 参数传递的可接受的类名是什么。

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

有人能告诉我可以传递给该参数的可接受的类名是什么吗? 谢谢!

有帮助吗?

解决方案

您可以查看“AeroStyle.xml”。正如上一张海报所述,它提供了Vista / Aero的精确列表。但是,如果您想要安全地玩(并且您可能这样做),通常,类名应该是Windows公共控件的Windows类名。例如,按钮和复选框使用类名“按钮”,编辑控件“编辑”等。我通常选择最接近我正在处理的任何自定义元素的控件的类名,并且使用主题数据。这样,无论用户选择的主题实际是什么,您都可以获得适用于XP,Vista和(希望)Windows 7的代码。

但是,除非你经常使用原始Win32,否则你可能不会直接使用类名做很多控件创建。类名在MSDN中非常自由地散布。一个好的起点通常是“CommCtrl.h”。来自Platform SDK的文件,其中包含很多文件,并且它们总是在MSDN帮助中对各个公共控件进行描述。您还可以通过查看.rc文件中的对话框如何在文本编辑器中打开来学习它们:它们包含控件的类名。

其他提示

文章 零件和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 Visual Themes:零件和状态库?提供了“零件和状态浏览器”应用程序,您可以在其中浏览和测试大多数样式。

班级名称取决于主题。例如,作为 OpenThemeData 的文档说明:

  

Aero主题的类名称是   在AeroStyle.xml中定义,即   在Include文件夹中找到   Microsoft Windows软件开发   套件(SDK)。

我知道这是一个老问题,但我想为那些来自谷歌的人提供更新的答案(2018年)。

DavidK接受的答案是查看文件“ AeroStyle.xml ”定义主题的位置。此文件是Windows 7 SDK的一部分,但已从Windows 10 SDK中删除,因此已接受的答案不再有用。

启动的答案链接到 MSDN ,其中主题名称,部分和状态列表高度不合并且未更新。

主题由 UxTheme.dll 绘制,它从 C:\ Windows文件夹中的 aero.msstyles 文件中读取图像和颜色等。 Windows 10上的\ Resources \ Themes \ Aero

但是当您在十六进制编辑器中打开此文件时,您将找不到所有主题的名称。我不知道是否有一种方法可以枚举所有可以传递给 OpenThemeData()的现有主题类名。我想这是不可能的。

但我确切知道的是,在Windows 10 build 18282中,Microsoft删除了主题“ Clock ”。这已被添加,并且已添加了许多未记录的主题,例如:“ TaskBand2CompositedSmallIconsVertical8Light :: Taskband2 ”它作为主题类名称传递给 OpenThemeData()

而且我也知道只有传递正确的窗口句柄才能获得几个主题。如果你传递了错误窗口的句柄,你可能会获得比预期更多的主题句柄,甚至 NULL

我也知道微软在过去的两年内已经改变了所有代码,使用 OpenThemeDataForDpi()而不是 OpenThemeData(),因为Windows 10上的每个监视器都可能有不同的分辨率。

我们遇到的问题是MSDN严重缺乏文档,缺乏枚举所有可用主题的API函数。

它与Aero无关,甚至在XP上也不存在! 请参阅OpenThemeData()的源代码..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top