2011-09-23 282 views
2

所以首先我使用的是Windows API,沒有特殊的庫。C++ Win32單選按鈕背景顏色

我創建了一個單選按鈕,此代碼:

g_hRadioButton = CreateWindowEx(0, "BUTTON", "Radio Button", 
    WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, 
    10, 55, 120, 25, hWnd, (HMENU)RADIOBUTTON, GetModuleHandle(NULL), NULL); 

現在我有一個主窗口黑色背景,所以我想文字爲白色,背景是透明的。

我試過檢查WM_CTLCOLORBTNWM_CTLCOLORSTATIC消息。

這裏是我的代碼:

case WM_CTLCOLORBTN: 
    SetTextColor((HDC)wParam, 0xffffff); 
    SetBkMode((HDC)wParam, TRANSPARENT); 
    return (LRESULT)GetStockObject(BLACK_BRUSH); 

case WM_CTLCOLORSTATIC: 
    SetTextColor((HDC)wParam, 0xffffff); 
    SetBkMode((HDC)wParam, TRANSPARENT); 
    return (LRESULT)GetStockObject(NULL_BRUSH); 

這不工作,背景仍然是白色和文字爲黑色。

此外,我已經啓用視覺樣式鏈接到ComCtl32.lib,創建清單和所有。

編輯:

嘗試處理NM_CUSTOMDRAW消息現在代替。 這是我的代碼,但它沒有效果,我很確定我做錯了什麼。

case WM_NOTIFY: 
{ 
    if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW) 
    { 
     LPNMCUSTOMDRAW nmCD = (LPNMCUSTOMDRAW)lParam; 
     switch(nmCD->dwDrawStage) 
     { 
      case CDDS_PREPAINT: 
       return CDRF_NOTIFYITEMDRAW; 

      case CDDS_ITEMPREPAINT: 
       SetTextColor(nmCD->hdc, 0xffffff); 
       SetBkColor(nmCD->hdc, 0x000000); 
       return CDRF_DODEFAULT; 
     } 
    } 

    break; 
} 

難道某人至少可以將我指向正確的方向嗎?

+0

你打電話給SetTextColor與RGB(0,0,0)這是黑色 – pezcode

+0

@pezcode固定。在我的實際程序中,我調用了一個返回顏色的函數,無論是白色還是紅色。我正在清理它,使這個問題更簡單。 – Josh

+0

那麼你的問題解決了嗎? –

回答

0

也許只要您的應用程序使用視覺樣式運行,您最好處理按鈕控制的NM_CUSTOMDRAW通知。最初,這些僅用於通用控件,但相當多的版本已經以同樣的方式擴展了按鈕行爲。

+1

關於處理NM_CUSTOMDRAW,請檢查以下代碼片段:http://msdn.microsoft.com/en-us/library/ff919573.aspx請注意,您不使用SetBkColor來指定背景顏色,正如您在代碼中嘗試的那樣。 –