¿øÇü |
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
|