我一直在尝试使用 C++ 为 Windows API 应用程序中的按钮设置主题。 我想让按钮标签一直都是红色的。 目前我只得到一个红色标签,直到我移动窗口,之后我得到一个带有红色标签的按钮。抱歉,我对原生 Windows API(以前的 win32 API)不是很有经验
我试过的代码如下。我创建按钮
GetClientRect(hWnd, &rect);
hButton = CreateWindowExW(
0L,
L"BUTTON",
L"Hello, World!!!",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_FLAT,
rect.right / 2 - 100,
rect.bottom / 2 - 25,
200,
50,
hWnd,
NULL,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
然后主题它我在 Window Proc 的 WM_PAINT 过程中使用以下代码
case WM_PAINT:
{
// Use DrawThemeBackground
RECT rc;
PAINTSTRUCT ps;
GetClientRect(hButton, &rc);
HDC hdc = GetDC(hWnd);
HTHEME theme = OpenThemeData(hWnd, L"button");
if (theme)
{
// Setup a DrawThemeTextEx Options struct
DTTOPTS opts = { 0 };
opts.dwSize = sizeof(opts);
opts.crText = RGB(255, 0, 0);
opts.dwFlags = DTT_TEXTCOLOR | DTT_COMPOSITED;
WCHAR caption[255];
GetWindowText(hButton, caption, 255);
DrawThemeTextEx(theme, hdc, BP_PUSHBUTTON, CBS_UNCHECKEDNORMAL,
caption, -1, DT_CENTER | DT_VCENTER | DT_SINGLELINE,
&rc, &opts);
CloseThemeData(theme);
}
else
{
// Draw the control without using visual styles.
}
ReleaseDC(hWnd, hdc);
break;
}
我想问一下我是不是做错了什么或者遗漏了什么。 我真的很感激。