簡體   English   中英

如何更改組合框的背景顏色

[英]How to change background color of combobox

如何使用Windows API在C ++中更改組合框的背景顏色?

通常,您可以在堆中創建畫筆,例如使用

static HBRUSH hbrush;
...
hbrush = CreateSolidBrush(RGB(255,0,0));

然后在“窗口”或“對話框”過程中,處理WM_CTL***消息並返回畫筆句柄,例如

case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
{
    HDC hdc = (HDC)wParam;
    SetTextColor(hdc, RGB(0, 0, 255)); //change text color
    SetBkMode(hdc, TRANSPARENT); //change text-background color, or set it to transparent
    return (INT_PTR)hbrush;
}

這也適用於ComboBox。 如果要單獨處理不同的控件,則可以對照控件的句柄檢查lParam

對於ComboBox,它要復雜一些。 您必須獲取ComboBox的EditBox和ListBox的句柄。 您可以使用GetComboBoxInfo做到這GetComboBoxInfo

case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
{
    HWND hTest = (HWND)lParam;
    COMBOBOXINFO ci = { sizeof(COMBOBOXINFO) };
    GetComboBoxInfo(hComboBox, &ci);

    if (
        hTest == ci.hwndItem ||
        hTest == ci.hwndList
        )
    {
        HDC hdc = (HDC)wParam;
        SetTextColor(hdc, RGB(0, 0, 255));
        SetBkMode(hdc, TRANSPARENT);
        return (INT_PTR)hbrush;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM