2016-06-09 82 views
1

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

+0

我使用了搜索字符串「MSDN C++ combobox background color」。可能的重複[如何設置組合框的背景顏色](https://social.msdn.microsoft.com/Forums/zh-CN/a92cb62b-9a92-4e32-afb9-a9366ba0e1e1/how-to-set-background-color-的編輯,控制和組合框控制?論壇= vclanguage)。互聯網是一個了不起的地方,首先搜索。 –

+0

另一種可能性:[SetBkColor函數](https://msdn.microsoft.com/en-us/library/windows/desktop/dd162964%28v=vs.85%29.aspx)。從我以前的搜索另一個選擇。 –

+0

你有什麼嘗試?請使用您嘗試過的簡單功能編輯您的文章。 –

回答

0

通常可以創建堆的刷子,例如使用

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的EditBox和ListBox的句柄。你可以使用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; 
    } 
}