2012-10-17 69 views
4

我已經寫了下面的代碼,將顏色應用到所有靜態文本在一個窗口,但 我想申請兩種不同的顏色一個窗口ID:1234其中ID是另一種顏色和1234會一個窗口中有不同的顏色。我怎樣才能做到這一點?這裏是我所做的:靜態文本顏色

case WM_CTLCOLORSTATIC: 

    SetBkColor(hdc, COLORREF(:: GetSysColor(COLOR_3DFACE)));  
    //sets bckcolor of static text same as window color 

    if ((HWND) lParam == GetDlgItem(hWnd, IDC_PID)) 
    { 
    SetTextColor((HDC) wParam, RGB(250, 50, 200)); 
    return (BOOL) CreateSolidBrush (GetSysColor(COLOR_3DFACE)); 
    } 

    break; 
+3

您應該創建2個靜態控件。 – imreal

回答

2

我不知道我理解你的問題。你的代碼看起來非常好。值得注意的一點是,你有責任清理你分配的資源。使用上面的代碼,您正在泄漏通過致電CreateSolidBrush創建的對象HBRUSH。由於您不需要自定義筆刷,因此應該使用GetSysColorBrush

作爲一個品味的問題,我會過濾控制ID而不是其窗口句柄使用GetDlgCtrlID。結合更改您的代碼應該看起來像這樣:

case WM_CTLCOLORSTATIC: 
    switch (GetDlgCtrlID((HWND)lParam)) 
    { 
    case IDC_PID: 
     //sets bckcolor of static text same as window color 
     SetBkColor((HDC)wParam, COLORREF(GetSysColor(COLOR_3DFACE)));  
     SetTextColor((HDC)wParam, RGB(250, 50, 200)); 
     return (INT_PTR)GetSysColorBrush(COLOR_3DFACE); 

    default: 
     // Message wasn't handled -> pass it on to the default handler 
     return 0; 
    }