| ¿øÇü |
BOOL TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, CONST RECT *prcRect); | ||||||||||||||||||||||||||||||||||||||||||
| MFC ¿øÇü |
BOOL CMenu::TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL ); | ||||||||||||||||||||||||||||||||||||||||||
| Àμö |
¢ºhMenu : Ãâ·ÂÇÒ ÆË¾÷ ¸Þ´ºÀÇ ÇÚµé. º¸Åë GetSubMenu ÇÔ¼ö·Î ±¸ÇÑ´Ù. ¢ºuFlags : ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÒ ¿É¼Ç. À§Ä¡¿Í ¸Þ´º Ç׸ñ ¼±Åÿ¡ °üÇÑ ¿©·¯ °¡Áö ¿É¼ÇÀÌ ÀÖ´Ù. ¢º(x,y) : ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÒ È¸é ÁÂÇ¥ ¢ºnReserved : »ç¿ëÇÏÁö ¾Ê´Â ÀμöÀ̸ç 0À¸·Î ÁÖ¸é µÈ´Ù. ¢ºhWnd : ÆË¾÷ ¸Þ´ºÀÇ ºÎ¸ð À©µµ¿ì ÇÚµéÀÌ¸ç ÆË¾÷ ¸Þ´º°¡ ¼±ÅõǾúÀ» ¶§ ÀÌ À©µµ¿ì·Î WM_COMMAND ¸Þ½ÃÁö°¡ Àü´ÞµÈ´Ù. ¢ºprcRect : »ç¿ëÇÏÁö ¾Ê´Â ÀμöÀ̸ç NULL·Î ÁÖ¸é µÈ´Ù. | ||||||||||||||||||||||||||||||||||||||||||
| ¸®ÅÏ |
¼º°øÇϸé 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÏ¸ç ½ÇÆÐ½Ã 0À» ¸®ÅÏÇÑ´Ù. uFlags¿¡ TPM_RETURNCMD Ç÷¡±×¸¦ ÁÖ¾úÀ» °æ¿ì ¸®ÅϰªÀº ¼±ÅÃÇÑ ¸Þ´º Ç׸ñÀÇ ID°¡ µÇ¸ç Ç׸ñ ¼±ÅÃÀ» Ãë¼ÒÇϸé 0ÀÌ ¸®ÅϵȴÙ. | ||||||||||||||||||||||||||||||||||||||||||
| ¼³¸í |
ȸéÀÇ ÀÓÀÇ À§Ä¡¿¡ ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÑ´Ù. ÆË¾÷ ¸Þ´º´Â ÁÖ·Î ¸¶¿ì½º ¹öưÀ» ´©¸¥ À§Ä¡¿¡ °ð¹Ù·Î ¿¸®¹Ç·Î ¼±ÅÃÇÏ±â Æí¸®ÇÏ¸ç ²À ÇÊ¿äÇÑ Ç׸ñ¸¸À» Æ÷ÇÔÇϹǷΠ¸ÞÀÎ ¸Þ´º¿¡ ºñÇØ¼´Â »ç¿ëÇϱ⠽±´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ ¸¶¿ì½º¸¦ ´©¸¥ À§Ä¡³ª »óȲ¿¡ µû¶ó ´Ù¸¥ ¸Þ´º¸¦ º¸¿©ÁÙ ¼öµµ ÀÖÀ¸¹Ç·Î ÈνŠ´õ Á÷°üÀûÀÌ´Ù. ÆË¾÷ ¸Þ´º¸¦ ¸¸µå·Á¸é ¸®¼Ò½º¿¡ ¸Þ´º¸¦ ¸¸µé°í LoadMenu, GetSubMenu ÇÔ¼ö·Î ¸Þ´ºÀÇ ÇÚµéÀ» ±¸ÇÑ ÈÄ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. (x,y)´Â ÆË¾÷ ¸Þ´º°¡ Ãâ·ÂµÉ ÁÂÇ¥ÀÌµÇ ÆË¾÷ ¸Þ´º´Â ȸé»óÀÇ ¾îµð¼³ª ¿¸± ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ÁÂÇ¥´Â ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥°¡ ¾Æ´Ñ ȸé ÁÂÇ¥°¡ µÈ´Ù. ÀϹÝÀûÀ¸·Î ÆË¾÷ ¸Þ´º´Â WM_CONTEXTMENU ¸Þ½ÃÁö¿¡¼ ¿©´Âµ¥ ÀÌ ¸Þ½ÃÁö´Â lParamÀ¸·Î ȸé ÁÂÇ¥¸¦ Àü´ÞÇØ ÁֹǷΠÀÌ ÁÂÇ¥¿¡ ÆË¾÷ ¸Þ´º¸¦ ¿¸é ¹«³ÇÏ´Ù. uFlags¿¡´Â ¿©·¯°¡Áö ¿É¼ÇÀÇ Á¶ÇÕÀ» ÁÙ ¼ö Àִµ¥ Ç÷¡±×´Â ¼º°Ý¿¡ µû¶ó ¸î°¡Áö ±×·ìÀ¸·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ Ç÷¡±×µéÀº ÆË¾÷ ¸Þ´º°¡ Ãâ·ÂµÉ ÁÂÇ¥¸¦ ÇØ¼®ÇÏ´Â ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ Ç÷¡±×µéÀÇ Á¶ÇÕ¿¡ µû¶ó (x,y)ÁÂÇ¥¸¦ ÆË¾÷ ¸Þ´ºÀÇ ¾îµð·Î ÇØ¼®ÇÒ °ÍÀΰ¡°¡ °áÁ¤µÈ´Ù.
µðÆúÆ®´Â ¼öÆòÀ¸·Î ÁÂÃø, ¼öÁ÷À¸·Î À§ÂÊ¿¡ Á¤·Ä(TPM_LEFTALIGN | TPM_TOPALIGN)µÇ¸ç ÀÌ À§Ä¡°¡ °¡Àå ÀÌ»óÀûÀÌ´Ù. ¼öÆòÀ¸·Î ¿ÞÂÊ Á¤·ÄµÈ´Ù´Â °ÍÀº xÁÂÇ¥°¡ ÆË¾÷ ¸Þ´ºÀÇ ¿ÞÂÊ ÁÂÇ¥¶ó´Â ¶æÀÌ¸ç µû¶ó¼ ¸¶¿ì½º Ä¿¼ÀÇ ¿À¸¥ÂÊ¿¡ ÆË¾÷ ¸Þ´º°¡ ¿¸°´Ù. ´ÙÀ½Àº ¸î°¡Áö Ç÷¹±×ÀÇ Á¶ÇÕÀ¸·Î ÆË¾÷ ¸Þ´ºÀÇ Ãâ·Â À§Ä¡¸¦ º¯°æÇØ º» °ÍÀÌ´Ù.
´ÙÀ½ Ç÷¡±×µéÀº ÆË¾÷ ¸Þ´ºÀÇ Ç׸ñÀ» ¼±ÅÃÇßÀ» ¶§ ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÑ´Ù.
´ÙÀ½ Ç÷¡±×µéÀº ÆË¾÷ ¸Þ´º°¡ ¿¸± ¶§ÀÇ ¾Ö´Ï¸ÞÀÌ¼Ç µ¿ÀÛÀ» ÁöÁ¤ÇÑ´Ù. ´Ü ÀÌ Ç÷¡±×µéÀº 98 ME, À©µµ¿ìÁî 2000À̻󿡼¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç Á¶ÇÕÇÏ¿© ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
´ÙÀ½ ¿¹Á¦´Â ÀÌ ÇÔ¼ö·Î ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÏ´Â °¡Àå ÀüÇüÀûÀÎ ¿¹Á¦ÀÌ´Ù. ¸®¼Ò½º¿¡´Â ¸Þ´º°¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.
¸Þ´º ¹Ù´Â »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î ´õ¹Ì Ç׸ñÀ» ¸¸µé¾î µÎ°í ÀÌ Ç׸ñ ¾Æ·¡¿¡ ¿øÇÏ´Â ÆË¾÷ ¸Þ´º¸¦ ÀÛ¼ºÇØ ³õ´Â´Ù. ´õ ÇÊ¿äÇÑ ÆË¾÷ ¸Þ´º°¡ ÀÖÀ¸¸é °°Àº ¸Þ´º ¾Æ·¡ ¿©·¯ °³ÀÇ ÆË¾÷ ¸Þ´º¸¦ °°ÀÌ ¸¸µé¾îµµ »ó°ü¾ø´Ù. ±×¸®°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÑ´Ù.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HMENU hMenu, hPopup;
switch(iMessage) {
case WM_CONTEXTMENU:
hMenu=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
hPopup=GetSubMenu(hMenu, 0);
TrackPopupMenu(hPopup, TPM_RIGHTBUTTON, LOWORD(lParam), HIWORD(lParam),
0, hWnd, NULL);
DestroyMenu(hMenu);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDM_POPUP1:
MessageBox(hWnd,"ù ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
case IDM_POPUP2:
MessageBox(hWnd,"µÎ ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
case IDM_POPUP3:
MessageBox(hWnd,"¼¼ ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´©¸¦ ¶§ Àü´ÞµÇ´Â WM_CONTEXTMENU ¸Þ½ÃÁö¿¡¼ ÆË¾÷ ¸Þ´º¸¦ Ãâ·ÂÇÏ¿´´Ù. LoadMenu ÇÔ¼ö·Î ¸Þ´º ¸®¼Ò½º¸¦ Àаí GetSubMenu·Î ù¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ±¸ÇÏ¿© Ãâ·ÂÇÏ¸é µÈ´Ù. ÆË¾÷ ¸Þ´ºÀÇ Ç׸ñÀ» ¼±ÅÃÇÏ¸é ºÎ¸ð À©µµ¿ì·Î WM_COMMNAND ¸Þ½ÃÁö¸¦ º¸³»ÁֹǷΠÅëÁö ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÇØ´çµÇ´Â 󸮸¦ ÇÏ¸é µÈ´Ù. ¿¹Á¦¿¡¼´Â ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿ö ÆË¾÷ ¸Þ´º°¡ ¼±ÅõǾúÀ½À» È®Àθ¸ ÇÏ¿´´Ù. ´ÙÀ½ ¿¹Á¦´Â ÆË¾÷ ¸Þ´º¿¡¼ ¼±ÅÃµÈ ¸Þ´º Ç׸ñÀ» ó¸®ÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HMENU hMenu, hPopup;
int idm;
switch(iMessage) {
case WM_CONTEXTMENU:
hMenu=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
hPopup=GetSubMenu(hMenu, 0);
idm=TrackPopupMenu(hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD,
LOWORD(lParam), HIWORD(lParam),
0, hWnd, NULL);
switch(idm) {
case IDM_POPUP1:
MessageBox(hWnd,"ù ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
case IDM_POPUP2:
MessageBox(hWnd,"µÎ ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
case IDM_POPUP3:
MessageBox(hWnd,"¼¼ ¹øÂ° ÆË¾÷ ¸Þ´º¸¦ ¼±ÅÃÇß½À´Ï´Ù","¾Ë¸²",MB_OK);
break;
}
DestroyMenu(hMenu);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
TPM_RETURNCMD Ç÷¡±×¸¦ »ç¿ëÇÏ¸é ¼±ÅÃÇÑ ¸Þ´º Ç׸ñÀÇ ID¸¦ °ð¹Ù·Î ¸®ÅÏÇØ ÁֹǷΠµû·Î ¸Þ½ÃÁö Çڵ鷯¸¦ ÀÛ¼ºÇÏÁö ¾Ê°í °ð¹Ù·Î ¼±ÅÃÇÑ Ç׸ñ¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÒ ¼ö ÀÖ´Ù. ¸Þ´º Ç׸ñÀÇ Àǹ̰¡ °£´ÜÇÒ °æ¿ì´Â ¸Þ´º¸¦ ¿¬ ÈÄ ¸Þ½ÃÁö¸¦ º¸³»Áö ¾Ê°í °ð¹Ù·Î 󸮸¦ ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÈξÀ ´õ °£´ÜÇÏ´Ù. ÆË¾÷ ¸Þ´º¸¦ ¿©´Â À©µµ¿ì°¡ Æ÷±×¶ó¿îµå À©µµ¿ì°¡ ¾Æ´Ñ °æ¿ì ÆË¾÷ ¸Þ´ºÀÇ ¹Ù±ùÀ» ¼±ÅÃÇßÀ» ¶§ ¸Þ´º°¡ »ç¶óÁöÁö ¾Ê´Â ¹ö±×°¡ ÀÖ´Ù. ÀÌ ¹ö±×´Â Æ®·¹ÀÌ¿¡ µî·ÏµÈ ¾ÆÀÌÄÜÀ¸·ÎºÎÅÍ ÆË¾÷ ¸Þ´º¸¦ ¿ ¶§ ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì ÆË¾÷ ¸Þ´º¸¦ È£ÃâÇϱâ Àü¿¡ SetForegroundWindow ÇÔ¼ö·Î ÇØ´ç À©µµ¿ì¸¦ Æ÷±×¶ó¿îµå·Î ¸¸µé¾î ÁØ ÈÄ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϰí ÇÔ¼ö ¸®ÅÏ Á÷ÈÄ¿¡ WM_NULL ¸Þ½ÃÁö¸¦ Å¥¿¡ ºÙÀÌ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. SetForegroundWindow(hWnd); | ||||||||||||||||||||||||||||||||||||||||||
| Âü°íÇÔ¼ö |
TrackPopupMenuEx : µ¿ÀÏÇÑ ÇÔ¼öÀÌµÇ ÆË¾÷ ¸Þ´º°¡ Ãâ·ÂµÇÁö ¸»¾Æ¾ß ÇÒ ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. | ||||||||||||||||||||||||||||||||||||||||||
| Ç÷§Æû | 95ÀÌ»ó | ||||||||||||||||||||||||||||||||||||||||||
| ÂüÁ¶ |
ÆË¾÷ ¸Þ´º¿¡ ´ëÇÑ ÀϹÝÀûÀÎ »ç¿ë¿¹´Â 19-2¿¡ ÀÖ´Ù. |
|
written by http://www.winapi.co.kr
|