如何在没有故障的情况下为按钮设置主题

问题描述 投票:0回答:0

我一直在尝试使用 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;
    }

我想问一下我是不是做错了什么或者遗漏了什么。 我真的很感激。

winapi visual-c++ uxtheme
© www.soinside.com 2019 - 2024. All rights reserved.