ÀÌ ¼½¼ÇÀÇ ¿¹´Â ´ÙÀ½ ±×¸²¿¡ Ç¥½Ã µÈ ´ëÈ »óÀÚ¿¡ ´ë ÇÑ Ã¢ ÇÁ·Î½ÃÀú.
È®Àζõ ¹× ¶óµð¿À ´ÜÃß ´ëÈ »óÀÚÀÇ ´ÜÃß ÀÚµ¿ µË´Ï´Ù. üũ ¹Ú½º´Â 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);
}