이 섹션의 예는 다음 그림에 표시 된 대화 상자에 대 한 창 프로시저.

확인란 및 라디오 단추 대화 상자의 단추 자동 됩니다. 체크 박스는 3 상태. 지우기 색상 단추 기본 누름 단추가입니다. 확인란, 라디오 단추 및 누름 단추 정의 응용 프로그램의 헤더 파일에 다음과 같은.
# define IDC_BOX1 101 / / 첫 번째 확인란 # IDC_BOX2 102 정의 / 초당 확인란 # define IDC_BOX3 103 / 셋째 확인란 # / IDC_REDBACK 104 정의 / 탑 라디오 버튼 / # define IDC_BLUEBACK 105 / 아래쪽 라디오 버튼 / # define IDC_CLEARBOXES 107 / 푸시 버튼 위로 / # define IDC_CLEARBACK 108 / 푸시 버튼 아래쪽 /
상자 1, 2 및 3 변경에서 결과 이러한 컨트롤 중 하나를 클릭 합니다. 선언 하 고 페인트 상자 1, 2 및 3에 다음 함수를 정의 해야 합니다.
void BoxPainter (HWND hDlg / 창 핸들 UINT uBox / / / LRESULT lState 페인트 상자); / / 상자의 상태
다음 창 프로시저에서 WM_CTLCOLORDLG 메시지 대화 상자를 그릴 수 있는 응용 프로그램을 알립니다. 사용자 (fClearColor 플래그에 의해 의미) 지우기 색상 버튼을 누르면, 프로시저 확인란 및 라디오 단추를 선택 취소 하려면 SendDlgItemMessage 함수를 사용 합니다. 클릭 된 단추의 식별자를 포함 하는 BN_CLICKED 알림 메시지.
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);
}