更改按钮的背景色

时间:2019-03-18 16:59:44

标签: api winapi

工程师 我创建了3个具有BS_OWNERDRAW样式的按钮 现在如何刷

函数WndProc(Hwnd,message,wparam,lparam) 案例WM_CTLCOLORBTN如果wparam = Button1然后 WndProc = hBrushbtn1Elseif Wparam = Button2然后WndProc = hBrushbt 2如果必须获得Wparam的Lparam的所有权并如何结束?

我无法获取每个按钮的画笔手柄

1 个答案:

答案 0 :(得分:0)

当所有者绘制的按钮想要更改其颜色时,在父窗口中处理WM_DRAWITEM消息。

使用BS_OWNERDRAW style创建所有者绘制的按钮:

   hwndButton1 = CreateWindowW(L"BUTTON", NULL,      
       WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
       10, 10, 100, 100, 
       hWnd, NULL, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);

在按钮的父窗口的窗口过程中:

case WM_DRAWITEM:
{
    LPDRAWITEMSTRUCT lpDIS = (LPDRAWITEMSTRUCT)lParam;
    if (hwndButton1 == lpDIS->hwndItem)
    {
        SetDCBrushColor(lpDIS->hDC, RGB(255, 0, 0));

        SelectObject(lpDIS->hDC, GetStockObject(DC_BRUSH));

        RoundRect(lpDIS->hDC, lpDIS->rcItem.left, lpDIS->rcItem.top,
            lpDIS->rcItem.right, lpDIS->rcItem.bottom, 5, 5);

        return TRUE;
    }
}
    break;