À̹ø¿¡´Â ¶È°°Àº ¿¹Á¦¸¦ ¸ðµ¨¸®½ºÇüÀ¸·Î ¸¸µé¾î º¸ÀÚ. ¸ðµ¨¸®½ºÇüÀº ´ëÈ»óÀÚ¸¦ ¿¾î³õÀº ä·Î ¸ÞÀÎ À©µµ¿ì¸¦ Á¶ÀÛÇÒ ¼ö Àֱ⠶§¹®¿¡ ¸ð´ÞÇü ´ëÈ»óÀÚº¸´Ù´Â ´õ º¹ÀâÇÏ¸ç »ç¿ëÇϱ⵵ ¾î·Æ´Ù. °ñÄ¡ ¾ÆÇ ¹®Á¦°¡ ¹ß»ýÇÒ ¼öµµ ÀÖÀ¸¸ç °Ô´Ù°¡ ´ëÈ»óÀÚ¸¦ ´ÝÁö ¾ÊÀº ä·Î °ªÀ» º¯°æÇÏ°í ¸ÞÀÎ À©µµ¿ì°¡ º¯°æµÈ °ªÀ» Áï°¢ ÀÎÁöÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ¾î¾ß ÇÏ´Â ºÎ´ã±îÁö Áö´Ï°í ÀÖ´Ù. ´ÙÀ½ ´Ü°è¸¦ µû¶ó InfoDlg ÇÁ·ÎÁ§Æ®¸¦ ¸ðµ¨¸®½ºÇüÀ¸·Î º¯°æÇØ º¸ÀÚ. 1ÀÏ´Ü Mless¶ó´Â À̸§À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ÀÌ ÇÁ·ÎÁ§Æ®¸¦ InfoDlg ÇÁ·ÎÁ§Æ®¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ±â´ÉÀ» °¡Áöµµ·Ï ¸¸µé¾î º¸ÀÚ. Mless ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç ÈÄ Mless µð·ºÅ丮·Î InfoDlg.cpp ¼Ò½º ÆÄÀÏ°ú InfoDlg.rc, resource.h ÆÄÀÏÀ» º¹»çÇÑ´Ù. ±×¸®°í InfoDlg.*¸¦ Mless.*·Î À̸§À» º¯°æÇÑ ÈÄ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃŲ´Ù. Mless.cppÀÇ ¼±µÎ¿¡ ÀÖ´Â ´ÙÀ½ ÇÑÁÙ¸¸ º¯°æÇÏ°í ³ª¸ÓÁö´Â ±×´ë·Î µÐ´Ù. LPSTR lpszClass="Mless"; ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ¿© ½ÇÇà½ÃÅ°¸é InfoDlg.exe¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ(ŸÀÌƲ ¹Ù¸¸ ´Ù¸£´Ù) ¿¹Á¦°¡ ¸¸µé¾îÁ³À» °ÍÀÌ´Ù. ÀÌ ¿¹Á¦¸¦ º¯ÇüÇÏ¿© ¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ¸¦ ¸¸µé¾î º¼ °ÍÀÌ´Ù. 2¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ¸¦ ¸¸µé±â À§Çؼ´Â ¿ì¼± ´ëÈ»óÀÚ¸¦ È£ÃâÇÏ´Â DialogBox ÇÔ¼ö¸¦ ¾ø¾Ö¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¸ð´ÞÇüÀÇ ´ëÈ»óÀÚ¸¦ ¸¸µé°í ½ÇÇà½ÃÅ°´Â ¸ðµç ÀÏÀ» ´Ù ÇÏ¸ç ´ëÈ»óÀÚ¸¦ Á¾·áÇϱâ Àü¿¡´Â ¸®ÅÏÇÏÁö ¾Ê´Â Ư¼ºÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇؼ´Â ¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ¸¦ ¸¸µé ¼ö ¾ø´Ù. ´ëÈ»óÀÚ¸¦ È£ÃâÇÏ´Â WM_LBUTTONDOWN ¸Þ½ÃÁö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù. case WM_LBUTTONDOWN: if (!IsWindow(hDlg)) { hDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1), hWnd,MlessDlgProc); ShowWindow(hDlg,SW_SHOW); } return 0; DialogBox ÇÔ¼ö ´ë½Å CreateDialog ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ´ëÈ»óÀÚ¸¦ ¸¸µé±â¸¸ ÇÏ¿´´Ù. CreateDialog ÇÔ¼ö´Â DialogBox ÇÔ¼ö¿Í µ¿ÀÏÇÑ Àμö¸¦ »ç¿ëÇ쵂 ´ëÈ»óÀÚ¸¦ ¸¸µé±â¸¸ ÇÏ¸ç ¸¸µç Áï½Ã ´ëÈ»óÀÚÀÇ Çڵ鰪À» ¸®ÅÏÇÑ´Ù. ÀÌ¿¡ ºñÇØ DialogBox ÇÔ¼ö´Â ´ëÈ»óÀÚ¸¦ ¸¸µå´Â °ÍÀº ¹°·Ð ´ëÈ»óÀÚ¸¦ ¿î¿ëÇÏ´Â ¸ðµç ÀÏÀ» ÁÖ°üÇÏ¸ç ´ëÈ»óÀÚ°¡ ´ÝÈú ¶§±îÁö ¸®ÅÏÇÏÁö ¾Ê´Â´Ù. CreateDialog ÇÔ¼ö°¡ ´ëÈ»óÀÚ¸¦ ¸¸µç Á÷ÈÄ ¹Ù·Î Á¾·áÇϱ⠶§¹®¿¡ ¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ°¡ µÇ´Â °ÍÀÌ´Ù. ´ëÈ»óÀÚ ÇÁ·Î½ÃÀúÀÇ À̸§Àº MlessDlgProcÀ¸·Î º¯°æÇÏ¿´´Ù. ´ëÈ»óÀÚ¸¦ ¸¸µç ÈÄ °ð¹Ù·Î ShowWindow ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ´ëÈ»óÀÚ°¡ ȸéÀ¸·Î ³ªÅ¸³ªµµ·Ï ÇÏ¿´´Ù. ´ëÈ»óÀÚ¿¡ WS_VISIBLE ½ºÅ¸ÀÏÀ» ÁÖ¾ú´Ù¸é ShowWindow ÇÔ¼ö´Â È£ÃâÇØÁÖÁö ¾Ê¾Æµµ »ó°ü¾øÁö¸¸ µðÆúÆ®·Î ´ëÈ»óÀÚ´Â WS_VISIBLE ½ºÅ¸ÀÏÀ» °¡ÁöÁö ¾ÊÀ¸¹Ç·Î ShowWindow ÇÔ¼ö¸¦ È£ÃâÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö È£ÃâÀ» »ý·«ÇØ ¹ö¸®¸é ´ëÈ»óÀÚ°¡ ¸¸µé¾îÁö±â¸¸ ÇÒ »Ó ȸéÀ¸·Î´Â º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. ¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ¸¦ ¸¸µé ¶§ ƯÈ÷ ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº °°Àº ´ëÈ»óÀÚ°¡ µÎ¹ø ¸¸µé¾îÁöÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¸ð´ÞÇüÀº ´ëÈ»óÀÚ¸¦ ´Ý±â Àü¿¡´Â ¸ÞÀÎ À©µµ¿ì¸¦ Á¶ÀÛÇÒ ¼ö ¾øÀ¸¹Ç·Î ±×·± ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾ÊÁö¸¸ ¸ðµ¨¸®½ºÇüÀº ´ëÈ»óÀÚ°¡ ¿¸°Ã¤·Î ¸ÞÀÎ À©µµ¿ì¿¡ ¸í·ÉÀ» ³»¸± ¼ö ÀÖ´Ù. ´ëÈ»óÀÚ°¡ ¿·ÁÀÖ´Â »óÅ¿¡¼ ¶Ç ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸£¸é ´ëÈ»óÀÚ°¡ µÎ °³ ¸¸µé¾îÁö°Ô µÇ´Â ±âÇö»óÀÌ ¹ß»ýÇÏ°Ô µÇ¸ç ÀÌ´Â °ñÄ¡ ¾ÆÇ ¹®Á¦ÀÇ ¿øÀÎÀÌ µÈ´Ù. ±×·¡¼ WM_LBUTTONDOWN ¸Þ½ÃÁö¿¡¼´Â ´ëÈ»óÀÚ¸¦ ¸¸µé±â Àü¿¡ hDlg, Áï ´ëÈ»óÀÚÀÇ À©µµ¿ì ÇÚµéÀ» Á¶»çÇØ º¸°í ÀÌ ÇÚµéÀÌ À¯È¿ÇÑ À©µµ¿ì ÇÚµéÀÎÁö¸¦ ¸ÕÀú Á¶»çÇØ º»´Ù. BOOL IsWindow( HWND hWnd );IsWindow ÇÔ¼ö´Â hWnd°¡ À¯È¿ÇÑ À©µµ¿ì ÇÚµéÀÎÁö Á¶»çÇØ º¸°í À©µµ¿ì°¡ Á¸ÀçÇϸé TRUE¸¦ ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é FALSE¸¦ ¸®ÅÏÇÑ´Ù. ±×·¡¼ hDlg°¡ Á¸ÀçÇÏÁö ¾ÊÀº °æ¿ì¿¡ ÇÑÇؼ¸¸ ´ëÈ»óÀÚ¸¦ ¸¸µéµµ·Ï ÇÏ¿© ´ëÈ»óÀÚ¸¦ µÎ¹ø ¸¸µéÁö ¾Êµµ·Ï ÇÑ´Ù. ´ëÈ»óÀÚÀÇ Á¸Àç ¿©ºÎ¸¦ ÇÚµéÀÇ À¯È¿¼ºÀ¸·Î ÆǺ°ÇϹǷΠhDlg º¯¼ö´Â Àü¿ªÀ¸·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPSTR lpszClass="Mless"; int x; int y; char str[128]; HWND hDlg; 3¸ð´ÞÇüÀÇ ´ëÈ»óÀÚ´Â OK, Cancel ¹öÆ° µÎ °³°¡ ÁÖ·Î »ç¿ëµÈ´Ù. OK´Â ÀÔ·ÂÇÑ °ªµéÀ» ¹Þ¾ÆµéÀδٴ ¶æÀ̸ç CancelÀº ÀԷ°ªÀ» ¹ö¸®¶ó´Â ¸í·ÉÀÌµÇ µÎ ¹öÆ° ¸ðµÎ ´ëÈ»óÀÚ¸¦ Á¾·á½ÃÅ°´Â °ÍÀº µ¿ÀÏÇÏ´Ù. ±×·±µ¥ ¸ðµ¨¸®½ºÇü ´ëÈ»óÀÚ¿¡´Â Ç×»ó ¿·ÁÀֱ⠶§¹®¿¡ OK, Cancel ¹öÆ°ÀÌ ³í¸®ÀûÀ¸·Î Àß ¾î¿ï¸®Áö ¾Ê´Â´Ù. ÀÌ ¹öÆ°º¸´Ù´Â ´ëÈ»óÀÚ¸¦ ¿¾î³õÀº ä·Î °ªÀ» ½ÇÁ¦·Î º¯°æ½ÃÅ°´Â Change ¹öÆ°°ú ´ëÈ»óÀÚ¸¦ ´Ý´Â Close ¹öÆ°ÀÌ ¸ðµ¨¸®½ºÇü¿¡ ´õ ÀûÇÕÇÏ´Ù. ´ëÈ»óÀÚ ÆíÁý±â¸¦ ¿¾î µÎ ¹öÆ°ÀÇ ID¿Í ĸ¼ÇÀ» ´ÙÀ½°ú °°ÀÌ º¯°æÇÑ´Ù.
4CreateDialog³ª DialogBox µîÀÇ ÇÔ¼öµéó·³ ù¹ø° Àμö·Î ÀνºÅϽº ÇÚµéÀ» ¿ä±¸ÇÏ´Â ÇÔ¼öµéÀÌ ¸¹ÀÌ ÀÖ´Ù. ±×·±µ¥ ÇÁ·Î±×·¥ÀÇ ÀνºÅϽº ÇÚµéÀº WinMainÀÇ Àμö·Î Àü´ÞµÇ´Â Áö¿ªº¯¼öÀ̱⠶§¹®¿¡ WinMain ¿ÜºÎÀÇ ´Ù¸¥ ÇÔ¼ö¿¡¼´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·¡¼ º¸Åë g_hInst ³ª glohInstance µîÀÇ Àü¿ª º¯¼ö¸¦ ¼±¾ðÇÏ°í WinMain¿¡¼ ÀÌ Àü¿ªº¯¼ö¿¡ ÀνºÅϽº Çڵ鰪À» ´ëÀÔÇØ ÁÖ´Â ¹æ¹ýÀ» ¸¹ÀÌ »ç¿ëÇÑ´Ù. InfoDlg ¿¹Á¦¿¡¼µµ ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¿´´Ù. ÀÌ¿Í ¸¶Âù°¡Áö·Î ¸ÞÀÎ À©µµ¿ìÀÇ Çڵ鵵 ¿©·¯ °÷¿¡¼ »ç¿ëµÇ´Âµ¥ WinMainÀ̳ª WndProc ÀÌ¿ÜÀÇ ÇÔ¼ö¿¡¼´Â ÀÌ Çڵ鰪À» ¾Ë ¼ö ¾ø´Ù. ±×·¡¼ ¸ÞÀÎ À©µµ¿ìÀÇ Çڵ鵵 ÀνºÅϽº ÇÚµé°ú ¸¶Âù°¡Áö·Î º°µµÀÇ Àü¿ª º¯¼ö¿¡ ´ëÀÔÇØ µÎ´Â ¹æ¹ýÀ» ¸¹ÀÌ »ç¿ëÇÑ´Ù. hMainWnd¶ó´Â À̸§ÀÇ Àü¿ª º¯¼ö¸¦ ¸¸µé°í WinMain¿¡¼ À©µµ¿ì¸¦ ¸¸µç Á÷ÈÄ¿¡ ÀÌ º¯¼ö¿¡ ¸ÞÀÎ À©µµ¿ìÀÇ ÇÚµéÀ» ´ëÀÔÇØ µÎµµ·Ï ÇÏÀÚ. HWND hMainWnd; int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; ................ hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL); ShowWindow(hWnd,nCmdShow); hMainWnd=hWnd; ÀÌ Çڵ鰪Àº Àá½Ã ÈÄ MlessDlgProc¿¡¼ »ç¿ëµÈ´Ù. 5¸¶Áö¸·À¸·Î InfoDlgProc ÇÔ¼ö¸¦ MlessDlgProcÀ¸·Î À̸§À» ¹Ù²Û ÈÄ Äڵ带 ¾à°£ ¼öÁ¤ÇÑ´Ù. º¯°æÇÑ ÈÄÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù. ¾îµð°¡ ¾î¶»°Ô º¯°æµÇ¾ú´ÂÁö InfoDlgProcÀÇ °æ¿ì¿Í ºñ±³ÇØ º¸µµ·Ï ÇÏÀÚ.
WM_INITDIALOG ¸Þ½ÃÁö ó¸® ºÎºÐÀº ÀüÇô º¯°æµÇÁö ¾Ê¾ÒÀ¸¸ç WM_COMMAND ¸Þ½ÃÁö ó¸® ºÎºÐÀÌ ¸¹ÀÌ º¯°æµÇ¾ú´Ù. ¿ì¼± ID_CHANGE ¹öÆ°ÀÌ ´·¯Áø °æ¿ì¸¦ º¸¸é ´ëÈ»óÀÚ ÄÁÆ®·Ñ¿¡¼ °ªÀ» Àоî Àü¿ª º¯¼ö¿¡ ´ëÀÔÇØÁÖ´Â ºÎºÐÀº µ¿ÀÏÇ쵂 ´ëÈ»óÀÚ¸¦ Á¾·áÇÏ´Â EndDialog ÇÔ¼ö°¡ »ç¶óÁ³´Ù. ¸ðµ¨¸®½ºÇüÀ̹ǷΠ°ª¸¸ º¯°æÇÒ »Ó ´ëÈ»óÀÚ¸¦ Á¾·áÇÒ ÇÊ¿ä´Â ¾ø±â ¶§¹®ÀÌ´Ù. ´ë½Å º¯°æµÈ °ªÀ» ¸ÞÀÎ À©µµ¿ì¿¡ Áï°¢ ¹Ý¿µÇϱâ À§ÇØ InvalidateRect ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸ÞÀÎ À©µµ¿ì Àüü¸¦ ¹«È¿È½ÃÄ×´Ù. ID_CLOSE°¡ ´·¯Áø °æ¿ì¿¡´Â ´ëÈ»óÀÚ¸¦ Æı«ÇÑ´Ù. ´ëÈ»óÀÚ¸¦ ¸¸µé ¶§ CreateDialog ÇÔ¼ö¸¦ »ç¿ëÇßÀ¸¹Ç·Î ´ëÈ»óÀÚ¸¦ ´ÝÀ» ¶§´Â DestroyWindow ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ´ëÈ»óÀÚ¸¦ Æı«ÇÑ ÈÄ ´ëÈ»óÀÚÀÇ À©µµ¿ì ÇÚµéÀÎ hDlg¿¡ NULLÀ» ´ëÀÔÇÏ¿© ´Ù½Ã ´ëÈ»óÀÚ¸¦ ¸¸µé¼ö ÀÖµµ·Ï ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ±×·³ ÀÌÁ¦ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ¿© ½ÇÇà½ÃÄÑ º¸ÀÚ. ½ÇÇà ÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù. ´ëÈ»óÀÚ¸¦ ¿¾î³õ°í ¸ÞÀÎ À©µµ¿ìÀÇ Å©±â¸¦ º¯°æÇϰųª À§Ä¡¸¦ ¿Å±æ ¼ö ÀÖ´Ù. ¸¸¾à ¸ÞÀÎ À©µµ¿ì¿¡ ¸Þ´º³ª Åø¹Ù µîÀÌ ÀÖ´Ù¸é ¼±ÅÃÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. |