Exemplul din această secțiune este procedura fereastra pentru caseta de dialog afișată în următoarea ilustrație.

Casete de selectare și butoane radio în caseta de dialog butoane sunt automate. Casetele de selectare sunt trei-stat. Butonul de Culori clare este un push butonul implicit. Casetele de selectare, butoane radio, precum și butoanele sunt definite în fișierul antet cererii, după cum urmează.
# define IDC_BOX1 101 / / selectare prima caseta # define IDC_BOX2 102 / / caseta de selectare a doua # define IDC_BOX3 103 / / selectare ter?e caseta # define IDC_REDBACK 104 / / top buton radio # define IDC_BLUEBACK 105 / / jos butonul radio # define IDC_CLEARBOXES 107 / / top push button # define IDC_CLEARBACK 108 / / jos push button
Făcând clic pe oricare dintre aceste controale determină o modificare la rubricile 1, 2 ?i 3. Trebuie să declare și să define următoarea funcție pentru a picta rubricile 1, 2 ?i 3.
void BoxPainter (HWND hDlg, / / fereastra ocupa UINT uBox, / / caseta pentru a picta LRESULT lState); / / stat din caseta
În următoarea procedură fereastra, mesajul WM_CTLCOLORDLG notifică aplicației care caseta de dialog este pe cale să fie trase. Dacă utilizatorul apasă butonul de Culori clare (simbolizată de fClearColor de pavilion), procedura utilizează funcția SendDlgItemMessage să debifați casetele de selectare și butoane radio. Mesajul de notificare BN_CLICKED conține identificatorii butonului care a fost făcut clic.
HBRUSH hbrRed, hbrBlue, hbrWhite;
BOOL fRedBack, fBlueBack, fClearColor; // background-state flags
BOOL CALLBACK ButtonProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam)
{
LRESULT lState;
switch (message)
{
case WM_INITDIALOG:
hbrRed = CreateSolidBrush(RGB(255, 0, 0));
hbrBlue = CreateSolidBrush(RGB(0, 0, 255));
hbrWhite = GetStockObject(WHITE_BRUSH);
return TRUE;
case WM_CTLCOLORDLG:
if (fRedBack)
{
fRedBack = FALSE;
return (LRESULT) hbrRed;
}
else if (fBlueBack)
{
fBlueBack = FALSE;
return (LRESULT) hbrBlue;
}
else if (fClearColor)
{
fClearColor = FALSE;
// Uncheck all check boxes and radio buttons.
SendDlgItemMessage(hDlg, // window handle
IDC_BOX1, // button identifier
BM_SETCHECK, // message
0, // check state unchecked)
0); // must be zero
SendDlgItemMessage(hDlg, IDC_BOX2, BM_SETCHECK, 0, 0);
SendDlgItemMessage(hDlg, IDC_BOX3, BM_SETCHECK, 0, 0);
SendDlgItemMessage(hDlg,IDC_REDBACK,BM_SETCHECK,0,0);
SendDlgItemMessage(hDlg,IDC_BLUEBACK,BM_SETCHECK,0,0);
}
return (LRESULT) hbrWhite;
case WM_COMMAND:
if (wParam == IDOK)
{
EndDialog(hDlg, TRUE);
return TRUE;
}
if (HIWORD(wParam) == BN_CLICKED)
{
switch (LOWORD(wParam))
{
case IDC_BOX1:
// Retrieve the state of the check box.
lState = SendDlgItemMessage(
hDlg, IDC_BOX1, BM_GETSTATE,
0, 0);
BoxPainter(hDlg, 1, lState);
break;
case IDC_BOX2:
lState = SendDlgItemMessage(
hDlg, IDC_BOX2, BM_GETSTATE, 0, 0);
BoxPainter(hDlg, 2, lState);
break;
case IDC_BOX3:
lState = SendDlgItemMessage(
hDlg, IDC_BOX3, BM_GETSTATE, 0, 0);
BoxPainter(hDlg, 3, lState);
break;
case IDC_REDBACK:
fRedBack = TRUE;
InvalidateRect(hDlg, NULL, TRUE);
break;
case IDC_BLUEBACK:
fBlueBack = TRUE;
InvalidateRect(hDlg, NULL, TRUE);
break;
case IDC_CLEARBACK:
fClearColor = TRUE;
InvalidateRect(hDlg, NULL, TRUE);
break;
case IDC_CLEARBOXES:
BoxPainter(hDlg, 4, (LRESULT) 0);
break;
}
}
case WM_DESTROY:
DeleteObject(hbrRed);
DeleteObject(hbrBlue);
// Do not delete hbrWhite, because it is a stock object.
break;
}
return FALSE; // did not process a message
UNREFERENCED_PARAMETER(lParam);
}