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 錯誤碼。
備註
如果已定義主題字型,函式一律會針對指定的部分和狀態使用主題字型。 否則,它會使用目前在裝置內容中選取的字型。 若要瞭解是否已定義主題字型,您可以呼叫 GetThemeFont 或 GetThemePropertyOrigin ,並將 TMT_FONT 作為屬性識別符。
範例
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 |
程式庫 | UxTheme.lib |
Dll | UxTheme.dll |