|
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
- 将声明添加到应用程序的资源文件中,如下所示:
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.manifest"
Winuser.rh 包括以下定义:
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define CONTROL_PANEL_RESOURCE_ID 123
#define RT_MANIFEST 24
在控制面板中或在通过 RunDll32.exe 运行的 DLL 中使用 ComCtl32 版本 6
要创建声明并使您的应用程序能够使用外观风格,请执行以下步骤:
- 链接到 ComCtl32.lib 并调用 InitCommonControls。
- 将名为 YourApp.cpl.manifest 文件添加到具有以下 XML 格式的源代码树中:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="CompanyName.ProductName.YourApp"
type="win32"
/>
<description>此处是您的应用程序说明。</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
- 将声明添加到应用程序的资源文件中,如下所示:
CONTROL_PANEL_RESOURCE_ID RT_MANIFEST "YourCpl.manifest"
注意:编写完控制面板应用程序后,请将其放置在相应的类别中。现在,控制面板支持控制面板应用程序的分类。也就是说,可以为控制面板应用程序分配标识符并将其分为若干个任务区域,如“添加或删除程序”、“外观和主题”、“日期、时间、语言和区域选项”。
将外观风格用于自定义控件
标题文件 Uxtheme.h 中定义了在向控件添加外观风格的步骤中以及在相应的代码示例中所引用的 UxTheme API。Platform SDK 中对该 API 的各元素进行了说明。本节将说明将外观风格应用于控件的步骤,并提供一个绘图代码示例以及有关绘制控件的技巧。
要使控件能够应用外观风格,请执行以下步骤:
- 调用 OpenThemeData 并将要应用外观风格的控件的 hwnd 传递给说明控件类型的类列表。Tmschema.h 中定义了各个类。OpenThemeData 返回一个 HTHEME 句柄,但是,如果外观风格管理器被禁用或当前的外观风格没有为给定控件提供特定的信息,该函数将返回 NULL。如果返回值是 NULL,则使用非外观风格的绘图函数。
- 要绘制控件,请调用 DrawThemeBackground 并传递以下内容:
- OpenThemeData 所返回的主题句柄 HDC,它用于呈现控件。
- 部件标识符,用于说明要呈现的控件部件。有关控件的部件和状态的信息,请参见“主题部件和状态”。
- 状态标识符,用于说明部件的当前状态。
- 指向 RECT 结构的指针,该结构包含将呈现控件的矩形的坐标。
- 有些部件可以是半透明的。要确定部件的透明度,可以使用主题句柄、控件部件和控件状态调用 IsThemeBackgroundPartiallyTransparent。
- 如果控件绘制的是文本,请将文本放置于控件的内容矩形中并选择字体。
- 要确定内容矩形的位置,请调用 GetThemeBackgroundContentRect。
- 将所需字体添加到设备上下文 (DC) 中,然后调用 DrawThemeText。该函数将启用外观效果,如一些控件中的阴影文本。
- 控件在接收到 WM_THEMECHANGED 消息后,应执行以下操作:
- 调用 CloseThemeData 以关闭现有主题句柄。
- 调用 OpenThemeData 以获得刚加载的外观风格的主题句柄。
- 此代码示例说明了这两种调用。
- case WM_THEMECHANGED:
- CloseThemeData (hTheme);
- hTheme = OpenThemeData (hwnd, L"MyClassName");
- 控件在接收到 WM_DESTROY 消息后,将调用 CloseThemeData 以释放在调用 OpenThemeData 时返回的主题句柄。
绘图代码示例
下面的代码示例说明了如何绘制按钮控件。
HTHEME hTheme = NULL;
hTheme = OpenThemeData(hwndButton, "Button");
…
DrawMyControl(hDC, hwndButton, hTheme, iState);
…
if (hTheme)
{
CloseTheme(hTheme);
}
void DrawMyControl(HDC hDC, HWND hwndButton, HTHEME hTheme, int iState)
{
RECT rc, rcContent;
TCHAR szButtonText[255];
HRESULT hr;
GetWindowRect(hwndButton, &rc);
GetWindowText(hwndButton, szButtonText,
ARRAYSIZE(szButtonText));
if (hTheme)
{
hr = DrawThemeBackground(hTheme, hDC, BP_BUTTON,
iState, &rc, 0);
//务必检查生成的代码。
Hr = GetThemeBackgroundContentRect(hTheme,
BP_BUTTON, iState, &rc, &rcContent);
hr = DrawThemeText(hTheme, hDC, BP_BUTTON, iState,
szButtonText, lstrlen(szButtonText),
上一页 [1] [2] [3] [4] 下一页
|