2010-02-14 10 views

Répondre

11

Dans le parent du contrôle d'édition, gérer le message WM_CTLCOLORSTATIC, le wParam de ce message est le HDC sur lequel le contrôle Edit est sur le point de dessiner, pour la plupart des messages CTLCOLOR, si vous définissez des couleurs de texte et d'arrière-plan dans ce DC, le contrôle utilisera les couleurs que vous définissez.

Vous pouvez également retourner un HBRUSH et le contrôle l'utilisera pour toute peinture au pinceau qu'il fera, mais de nombreuses commandes n'utilisent pas beaucoup de brosses, ce qui aura un effet limité sur certains messages CTLOLOLOR . Votre meilleur pari ici est de renvoyer la brosse DC, et régler la couleur DC Brush pour correspondre à la BkColor du DC.

LRESULT lRet = 0; // return value for our WindowProc. 
COLORREF crBk = RGB(255,0,0); // use RED for Background. 

... 

case WM_CTLCOLORSTATIC: 
    { 
    HDC hdc = (HDC)wParam; 
    HWND hwnd = (HWND)lParam; 

    // if multiple edits and only one should be colored, use 
    // the control id to tell them apart. 
    // 
    if (GetDlgCtrlId(hwnd) == IDC_EDIT_RECOLOR) 
     { 
     SetBkColor(hdc, crBk); // Set to red 
     SetDCBrushColor(hdc, crBk); 
     lRet = (LRESULT) GetStockObject(DC_BRUSH); // return a DC brush. 
     } 
    else 
     { 
     lRet = DefWindowProc(hwnd, uMsg, wParam, lParam); 
     } 
    } 
    break; 
2

WM_CTLCOLOREDIT vous permet de définir le texte et la couleur d'arrière-plan (+ brosse), si vous voulez plus de contrôle que cela, vous devez sous-classe et vous peindre

4

WM_CTLCOLORSTATIC est pour le contrôle de texte statique.

Pour être simple, vous pouvez le faire dans votre WinProc:

... 
case WM_CTLCOLOREDIT: 
{ 
    HDC hdc = (HDC)wParam; 
    SetTextColor(hdc, yourColor); // yourColor is a WORD and it's format is 0x00BBGGRR 
    return (LRESULT) GetStockObject(DC_BRUSH); // return a DC brush. 
} 
... 

Si vous avez plus de 1 contrôle d'édition, vous pouvez utiliser l'identifiant de l'article et lParam pour vérifier que l'on a besoin d'être changé.

+0

'WM_CTLCOLORSTATIC' est aussi pour les contrôles d'édition en lecture seule. – 0xC0000022L

0

vous pourriez faire quelque chose comme ceci:

CBrush bkBrush; 
RECT ctrlRect; 
COLORREF crBk = RGB(255,0,0); // Red color 
bkBrush.CreateSolidBrush(crBk); 

CWnd* pDlg = CWnd::GetDlgItem(IDC_EDIT); 
pDlg->GetClientRect(&ctrlRect); 
pDlg->GetWindowDC()->FillRect(&ctrlRec, &bkBrush); 
pDlg->GetWindowDC()->SetBkColor(crBk); 

Cela devrait changer la couleur d'arrière-plan du contrôle de modifier

Questions connexes