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。 有关可能的参数 值,请参阅设置值格式

注意 DrawThemeText 不支持DT_CALCRECT。 但是, DrawThemeTextEx 支持DT_CALCRECT。
 

[in] dwTextFlags2

类型: DWORD

未使用。 设置为零。

[in] pRect

类型: LPCRECT

指向 RECT 结构的指针,该结构包含要在其中绘制文本的逻辑坐标矩形。 建议使用 GetThemeTextExtent 中的 pExtentRect 来检索正确的坐标。

返回值

类型: HRESULT

如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

函数始终对指定的部分和状态使用主题字体(如果已定义)。 否则,它将使用当前在设备上下文中选择的字体。 若要确定是否定义了主题字体,可以使用 TMT_FONT 作为属性标识符调用 GetThemeFontGetThemePropertyOrigin

示例

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

另请参阅

属性标识符