Àμö |
wParam : ½Ã½ºÅÛ ¸í·ÉÀÇ Á¾·ù°¡ Àü´ÞµÇ¸ç »ç¿ëÀÚ°¡ ½Ã½ºÅÛ ¸Þ´º¿¡¼ ¾î¶² Ç׸ñÀ» ¼±ÅÃÇß´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù. ÀÌ °ªÀÇ ÇÏÀ§ 4ºñÆ®´Â ½Ã½ºÅÛÀÌ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â °ªÀ̹ǷΠ¸í·ÉÀÇ Á¾·ù¸¦ ¾Ë°í ½ÍÀ¸¸é wParamÀ» 0xFFF0¿Í AND¿¬»êÇØ¾ß ÇÑ´Ù. ¿¬»êÇÑ °á°ú´Â ´ÙÀ½°ª ÁßÀÇ Çϳª°¡ µÈ´Ù.
°¢ °ªµéÀº ÇØ´ç ¸í·ÉÀÌ ¼±ÅõǾú´Ù´Â ¶æÀÌÁö ÀÌ¹Ì ½ÇÇàµÇ¾ú´Ù´Â ¶æÀÌ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚ°¡ ½Ã½ºÅÛ ¸Þ´º¿¡¼ 'À̵¿'Ç׸ñÀ» ¼±ÅÃÇϸé SC_MOVE°¡ Àü´ÞµÇ´Âµ¥ À̶§´Â ¾ÆÁ÷ À̵¿À» ½ÃÀÛÇÏÁö ¾ÊÀº »óÅÂÀÌ´Ù. lParam : ¸¶¿ì½º·Î À©µµ¿ì ¸Þ´º¸¦ ¼±ÅÃÇÑ °æ¿ì Ä¿¼ÀÇ ÁÂÇ¥°¡ Àü´ÞµÈ´Ù. ÇÏÀ§ ¿öµå¿¡´Â ¼öÆò ÁÂÇ¥, »óÀ§ ¿öµå¿¡´Â ¼öÁ÷ ÁÂÇ¥°¡ Àü´ÞµÇ´Âµ¥ ÀÌ ÁÂÇ¥´Â È¸é ±âÁØ ÁÂÇ¥ÀÌ´Ù. ¾×¼¿·¯·¹ÀÌÅÍ¿¡ ÀÇÇØ ¸í·ÉÀÌ ¼±ÅõǾúÀ¸¸é -1ÀÌ µÇ¸ç ´Ï¸ð´Ð¿¡ ÀÇÇØ ¼±ÅõǾúÀ¸¸é 0ÀÌ µÈ´Ù. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¼³¸í |
½Ã½ºÅÛ ¸Þ´º¿¡ ÀÖ´Â ¸Þ´º Ç׸ñÀ» ¼±ÅÃÇϸé WM_COMMAND ¸Þ½ÃÁö ´ë½Å ÀÌ ¸Þ½ÃÁö°¡ Àü´ÞµÈ´Ù. ½Ã½ºÅÛ ¸Þ´º¸¦ Á÷Á¢ ¼±ÅÃÇÏ´Â µ¿ÀÛ ¿Ü¿¡µµ ŸÀÌƲ ¹Ù¿¡ ÀÖ´Â ÃÖ´ë, ÃÖ¼Ò, ´Ý±â ¹öÆ° µîÀÇ ¸í·Éµéµµ ÀÌ ¸Þ½ÃÁö¸¦ ¹ß»ý½ÃŲ´Ù. ½Ã½ºÅÛ ¸Þ´º¿¡ ÀÖ´Â ¸í·ÉµéÀº À©µµ¿ì¸¦ °ü¸®Çϱâ À§ÇÑ ±âº»ÀûÀÎ ¸í·ÉÀ̹ǷΠÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÌ ¸Þ½ÃÁö¸¦ Á÷Á¢ ó¸®ÇÏÁö ¾Ê°í º¸Åë DefWindowProcÀ¸·Î ±×³É º¸³» ÁØ´Ù. DefWindowProcÀº wParam°ª¿¡ µû¶ó ½Ã½ºÅÛ¿¡ ¹Ì¸® Á¤ÀǵǾî ÀÖ´Â µ¿ÀÛÀ» ¼öÇàÇÑ´Ù. ¿¹¸¦ µé¾î SC_MINIMIZE ½Ã½ºÅÛ ¸í·ÉÀÌ Àü´ÞµÇ¾úÀ¸¸é À©µµ¿ì¸¦ ÃÖ¼ÒÈÇÏ°í SC_CLOSE ¸í·ÉÀÌ Àü´ÞµÇ¾úÀ¸¸é À©µµ¿ì¸¦ ´Ý´Â´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á÷Á¢ ÀÌ ½Ã½ºÅÛ ¸í·ÉÀ» ÇÁ·Î±×·¡¹Ö ÇÏ°í ½Í´Ù¸é ÀÌ ¸Þ½ÃÁö¸¦ ó¸®Çϸç ÀÚ½ÅÀÌ Ã³¸®ÇÑ ½Ã½ºÅÛ ¸í·ÉÀº DefWindowProcÀ¸·Î º¸³»Áö ¸»¾Æ¾ß ÇÑ´Ù. ±×¿ÜÀÇ ½Ã½ºÅÛ ¸í·ÉÀº ¸ðµÎ DefWindowProcÀ¸·Î º¸³» ÁÖ¾î µðÆúÆ® 󸮸¦ Çϵµ·Ï ÇØ¾ß ÇÑ´Ù. ½Ã½ºÅÛ ¸Þ´º¿¡´Â À̵¿, ÃÖ¼ÒÈ, ÃÖ´ëÈ, Å©±â Á¶Á¤, ´Ý±â µîÀÇ Ç¥ÁØ À©µµ¿ì °ü¸® ¸í·Éµé¸¸ µé¾î ÀÖ´Ù. GetSystemMenu, AppendMenu µîÀÇ ¸Þ´º °ü·Ã ¸í·ÉÀ» »ç¿ëÇÏ¸é ½Ã½ºÅÛ ¸Þ´º¿¡µµ ÀÀ¿ë ÇÁ·Î±×·¥ °íÀ¯ÀÇ ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø ¸Þ´º Ç׸ñÀ» ¼±ÅÃÇÒ ¶§´Â WM_COMMAND ´ë½Å WM_SYSCOMMAND ¸Þ½ÃÁö°¡ ´ë½Å Àü´ÞµÇ¹Ç·Î ¹Ýµå½Ã ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇØ¾ß ÇÑ´Ù. ÀÌ °æ¿ì Á÷Á¢ Ãß°¡ÇÑ ¸Þ´º Ç׸ñ ¿ÜÀÇ ½Ã½ºÅÛ ¸í·ÉÀº ¸ðµÎ DefWindowProcÀ¸·Î Àü´ÞÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½Ã½ºÅÛ ¸í·ÉÀ» Á÷Á¢ ½ÇÇàÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é wParam¿¡ ¿øÇÏ´Â ½Ã½ºÅÛ ¸í·ÉÀ» ´ëÀÔÇÏ°í DefWindowProcÀ¸·Î WM_SYSCOMMAND¸¦ º¸³» ÁØ´Ù. ¿¹¸¦ µé¾î À©µµ¿ì¸¦ ´Ý°í ½ÍÀ¸¸é SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); ¸í·ÉÀ» º¸³» ÁÖ¸é µÈ´Ù. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¸®ÅÏ |
ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇßÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¿¹Á¦ |
´ÙÀ½ ¿¹Á¦´Â ½Ã½ºÅÛ ¸í·ÉÀÌ ¾ðÁ¦ È£ÃâµÇ´ÂÁö¸¦ º¸¿© ÁØ´Ù. WM_SYSCOMMAND ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§¸¶´Ù ¾î¶² ¸Þ½ÃÁö¸¦ ¹Þ¾Ò´ÂÁö ±â·ÏÇÏ°í ÀÛ¾÷ ¿µ¿ª¿¡ º¸¿© ÁÜÀ¸·Î½á ½Ã½ºÅÛ ¸í·É ¹æ»ý ½Ã±â¸¦ ÇнÀÇϱâ À§ÇØ Á¦ÀÛÇÏ¿´´Ù. int y=40; TCHAR buf[10000]; void PrintMessage(TCHAR *str) { lstrcat(buf,str); lstrcat(buf,"\r\n"); InvalidateRect(hWndMain,NULL,TRUE); y+=20; } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; TCHAR str[128]; TCHAR Mes[]="½Ã½ºÅÛ ¸í·É ¸Þ½ÃÁö¸¦ º¸¿© ÁÝ´Ï´Ù"; RECT crt; switch(iMessage) { case WM_SYSCOMMAND: switch (wParam & 0xFFF0) { case SC_CLOSE: PrintMessage("SC_CLOSE"); break; case SC_KEYMENU: PrintMessage("SC_KEYMENU"); break; case SC_MOVE: PrintMessage("SC_MOVE"); break; case SC_MAXIMIZE: PrintMessage("SC_MAXIMIZE"); break; case SC_MINIMIZE: PrintMessage("SC_MINIMIZE"); break; case SC_MOUSEMENU: PrintMessage("SC_MOUSEMENU"); break; case SC_NEXTWINDOW: PrintMessage("SC_NEXTWINDOW"); break; case SC_PREVWINDOW: PrintMessage("SC_PREVWINDOW"); break; case SC_RESTORE: PrintMessage("SC_RESTORE"); break; case SC_SIZE: PrintMessage("SC_SIZE"); break; default: wsprintf(str, "±×¿ÜÀÇ ½Ã½ºÅÛ ¸í·É. wParam=%X", wParam); PrintMessage(str); break; } break; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); TextOut(hdc,10,10,Mes,lstrlen(Mes)); GetClientRect(hWnd,&crt); crt.top=40; crt.left=200; DrawText(hdc,buf,-1,&crt,0); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù. Å°º¸µå ¹× ¸¶¿ì½º µîÀ¸·Î ½Ã½ºÅÛ ¸Þ´º¸¦ ¿¾î º¸°í ŸÀÌƲ ¹ÙÀÇ °¢ ¹öÆ°À» ´·¯ º¸¸é ¾ðÁ¦ ½Ã½ºÅÛ ¸í·ÉÀÌ ¹ß»ýÇÏ´ÂÁö ¾Ë ¼ö ÀÖ´Ù. ¸ðµç ½Ã½ºÅÛ ¸í·ÉÀº DefWindowProcÀ¸·Î º¸³» ÁÖ¾î µðÆúÆ® 󸮸¦ ÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. ¸¸¾à À§ ¼Ò½º¿¡¼ SC_MOVE¸¦ ¹Þ¾ÒÀ» ¶§ return 0; ÇØ ¹ö¸®¸é À©µµ¿ì À̵¿ÀÌ ºÒ°¡´ÉÇØÁø´Ù. ´ÙÀ½ ¿¹Á¦´Â ½Ã½ºÅÛ ¸Þ´º¿¡ ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÏ°í ÀÌ Ç׸ñÀÌ ¼±ÅõǾúÀ» ¶§¸¦ ó¸®ÇÑ´Ù. #define IDM_SYS_TEST 41000 LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HMENU hSysMenu; switch(iMessage) { case WM_CREATE: hSysMenu=GetSystemMenu(hWnd, FALSE); AppendMenu(hSysMenu, MF_STRING, IDM_SYS_TEST, "Å×½ºÆ® Ç׸ñ"); return 0; case WM_SYSCOMMAND: switch (LOWORD(wParam)) { case IDM_SYS_TEST: MessageBox(hWnd, "½Ã½ºÅÛ ¸Þ´º¿¡ ÀÖ´Â Å×½ºÆ® Ç׸ñÀ» ¼±ÅÃÇ߳׿ä.","¾Ë¸²",MB_OK); return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ½Ã½ºÅÛ ¸Þ´ºÀÇ Ç׸ñÀº WM_COMMND ¸Þ½ÃÁö ´ë½Å WM_SYSCOMMAND ¸Þ½ÃÁö°¡ ¹ß»ýÇϹǷΠ¹Ýµå½Ã ÀÌ ¸Þ½ÃÁö¿¡¼ ó¸®ÇØ¾ß ÇÑ´Ù. IDM_SYS_TEST Ç׸ñ ÀÌ¿ÜÀÇ ½Ã½ºÅÛ ¸í·É¿¡ ´ëÇؼ´Â breakÇÏ¿© DefWindowProcÀ¸·Î ³Ñ°Ü ÁÖ¾î µðÆúÆ® 󸮸¦ Çϵµ·Ï ÇØ ÁÖ¾ú´Ù. Á÷Á¢ ó¸®ÇÏÁö ¾Ê´Â ½Ã½ºÅÛ ¸í·ÉÀº ¹Ýµå½Ã DefWindowProcÀ¸·Î ³Ñ°Ü ÁÖ¾î¾ß ÇÑ´Ù. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ç÷§Æû |
95ÀÌ»ó |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ÂüÁ¶ |
WM_COMMAND |
written by http://www.winapi.co.kr
|