DrawThemeText 函数 (uxtheme.h)
使用视觉样式定义的颜色和字体绘制文本。
语法
HRESULT DrawThemeText(
[in] HTHEME hTheme,
[in] HDC hdc,
[in] int iPartId,
[in] int iStateId,
[in] LPCWSTR pszText,
[in] int cchText,
[in] DWORD dwTextFlags,
[in] DWORD dwTextFlags2,
[in] LPCRECT pRect
);
参数
[in] hTheme
类型: HTHEME
窗口主题数据的句柄。 使用 OpenThemeData 创建 HTHEME。
[in] hdc
类型: HDC
用于绘图的 HDC。
[in] iPartId
类型: int
具有所需文本外观的控件部件。 请参阅 部件和状态。 如果此值为 0,则会使用默认字体或在设备上下文中选择的字体绘制文本。
[in] iStateId
类型: int
具有所需文本外观的控件状态。 请参阅 部件和状态。
[in] pszText
类型: LPCWSTR
指向包含要绘制的文本的字符串的指针。
[in] cchText
类型: int
包含要绘制的字符数的 int 类型的值。 如果 参数设置为 -1,则绘制字符串中的所有字符。
[in] dwTextFlags
类型: DWORD
包含指定字符串格式的一个或多个值的 DWORD。 有关可能的参数 值,请参阅设置值格式 。
[in] dwTextFlags2
类型: DWORD
未使用。 设置为零。
[in] pRect
类型: LPCRECT
指向 RECT 结构的指针,该结构包含要在其中绘制文本的逻辑坐标矩形。 建议使用 GetThemeTextExtent 中的 pExtentRect 来检索正确的坐标。
返回值
类型: HRESULT
如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
函数始终对指定的部分和状态使用主题字体(如果已定义)。 否则,它将使用当前在设备上下文中选择的字体。 若要确定是否定义了主题字体,可以使用 TMT_FONT 作为属性标识符调用 GetThemeFont 或 GetThemePropertyOrigin 。
示例
DrawThemeText 使用的参数类似于 Win32 DrawText 函数,但存在一些差异。 其中一个最值得注意的是对宽字符字符串的支持。 因此,非宽字符串必须转换为宽字符串,如以下示例所示。
安全警告: 错误地使用 MultiByteToWideChar 可能会危及应用程序的安全性。 确保在创建宽字符缓冲区时,它们足够大,以宽字符(而不是字节)容纳字符串的大小。
INT cchText = GetWindowTextLength(_hwnd);
if (cchText > 0)
{
TCHAR *pszText = new TCHAR[cchText+1];
if (pszText)
{
if (GetWindowText(_hwnd, pszText, cchText+1))
{
int widelen = MultiByteToWideChar(CP_ACP, 0, reinterpret_cast<LPCSTR>(pszText),
cchText+1, NULL, 0);
WCHAR *pszWideText = new WCHAR[widelen+1];
MultiByteToWideChar(CP_ACP, 0, reinterpret_cast<LPCSTR>(pszText), cchText,
pszWideText, widelen);
SetBkMode(hdcPaint, TRANSPARENT);
DrawThemeText(_hTheme,
hdcPaint,
BP_PUSHBUTTON,
_iStateId,
pszWideText,
cchText,
DT_CENTER | DT_VCENTER | DT_SINGLELINE,
NULL,
&rcContent);
delete [] pszWideText;
}
delete [] pszText;
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | uxtheme.h |
Library | UxTheme.lib |
DLL | UxTheme.dll |