TrackPopupMenu

¿øÇü

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_RIGHTALIGN Æ˾÷ ¸Þ´º¸¦ ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ ¿ìÃø Á¤·ÄÇÑ´Ù.
TPM_CENTERALIGN Æ˾÷ ¸Þ´º¸¦ ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ ¼öÆò Áß¾Ó Á¤·ÄÇÑ´Ù.
TPM_TOPALIGN Æ˾÷ ¸Þ´º¸¦ ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ À§ÂÊ¿¡ Á¤·ÄÇÑ´Ù.
TPM_BOTTOMALIGN Æ˾÷ ¸Þ´º¸¦ ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ ¹Ù´Ú¿¡ Á¤·ÄÇÑ´Ù.
TPM_VCENTERALIGN Æ˾÷ ¸Þ´º¸¦ ÁöÁ¤ÇÑ À§Ä¡¿¡¼­ ¼öÁ÷ Áß¾Ó Á¤·ÄÇÑ´Ù.

µðÆúÆ®´Â ¼öÆòÀ¸·Î ÁÂÃø, ¼öÁ÷À¸·Î À§ÂÊ¿¡ Á¤·Ä(TPM_LEFTALIGN | TPM_TOPALIGN)µÇ¸ç ÀÌ À§Ä¡°¡ °¡Àå ÀÌ»óÀûÀÌ´Ù. ¼öÆòÀ¸·Î ¿ÞÂÊ Á¤·ÄµÈ´Ù´Â °ÍÀº xÁÂÇ¥°¡ Æ˾÷ ¸Þ´ºÀÇ ¿ÞÂÊ ÁÂÇ¥¶ó´Â ¶æÀÌ¸ç µû¶ó¼­ ¸¶¿ì½º Ä¿¼­ÀÇ ¿À¸¥ÂÊ¿¡ Æ˾÷ ¸Þ´º°¡ ¿­¸°´Ù. ´ÙÀ½Àº ¸î°¡Áö Ç÷¹±×ÀÇ Á¶ÇÕÀ¸·Î Æ˾÷ ¸Þ´ºÀÇ Ãâ·Â À§Ä¡¸¦ º¯°æÇØ º» °ÍÀÌ´Ù.

µðÆúÆ®

TPM_CENTERALIGN |
TPM_VCENTERALIGN

TPM_RIGHTALIGN

´ÙÀ½ Ç÷¡±×µéÀº Æ˾÷ ¸Þ´ºÀÇ Ç׸ñÀ» ¼±ÅÃÇßÀ» ¶§ ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀ» Á¤ÀÇÇÑ´Ù.

Ç÷¡±× ¼³¸í

TPM_LEFTBUTTON

¿ÞÂÊ ¹öÆ°À» ´­·¶À» ¶§¸¸ ¸Þ´º Ç׸ñÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ Ç÷¡±×´Â µðÆúÆ®À̹ǷΠ±»ÀÌ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

TPM_RIGHTBUTTON

¿À¸¥ÂÊ ¹öÆ°À¸·Îµµ ¸Þ´º Ç׸ñÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. Æ˾÷ ¸Þ´º´Â ¿À¸¥ÂÊ ¸¶¿ì½º ¹öÆ°À¸·Î ¿©´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î ÀÌ Ç÷¡±×¸¦ ÁöÁ¤ÇØ ³õÀ¸¸é ¸Þ´º Ç׸ñÀ» ´õ Æí¸®ÇÏ°Ô ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.

TPM_NONOTIFY ¸Þ´º Ç׸ñÀÌ ¼±ÅõǾúÀ» ¶§ ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»Áö ¾Ê´Â´Ù.
TPM_RETURNCMD ¸Þ´º Ç׸ñÀÌ ¼±ÅõǾúÀ» ¶§ ¼±ÅÃµÈ ¸Þ´º Ç׸ñÀÇ ID¸¦ ¸®ÅÏÇÑ´Ù.

´ÙÀ½ Ç÷¡±×µéÀº Æ˾÷ ¸Þ´º°¡ ¿­¸± ¶§ÀÇ ¾Ö´Ï¸ÞÀÌ¼Ç µ¿ÀÛÀ» ÁöÁ¤ÇÑ´Ù. ´Ü ÀÌ Ç÷¡±×µéÀº 98 ME, À©µµ¿ìÁî 2000À̻󿡼­¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç Á¶ÇÕÇÏ¿© ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

Ç÷¡±× ¼³¸í

TPM_HORNEGANIMATION

¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î

TPM_HORPOSANIMATION ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î
TPM_NOANIMATION ¾Ö´Ï¸ÞÀ̼ÇÀ» ÇÏÁö ¾ÊÀ½
TPM_VERNEGANIMATION ¾Æ·¡ÂÊ¿¡¼­ À§ÂÊÀ¸·Î
TPM_VERPOSANIMATION À§ÂÊ¿¡¼­ ¾Æ·¡ÂÊÀ¸·Î

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â ÀÌ ÇÔ¼ö·Î Æ˾÷ ¸Þ´º¸¦ Ãâ·ÂÇÏ´Â °¡Àå ÀüÇüÀûÀÎ ¿¹Á¦ÀÌ´Ù. ¸®¼Ò½º¿¡´Â ¸Þ´º°¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.

¸Þ´º ¹Ù´Â »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î ´õ¹Ì Ç׸ñÀ» ¸¸µé¾î µÎ°í ÀÌ Ç׸ñ ¾Æ·¡¿¡ ¿øÇÏ´Â Æ˾÷ ¸Þ´º¸¦ ÀÛ¼ºÇØ ³õ´Â´Ù. ´õ ÇÊ¿äÇÑ Æ˾÷ ¸Þ´º°¡ ÀÖÀ¸¸é °°Àº ¸Þ´º ¾Æ·¡ ¿©·¯ °³ÀÇ Æ˾÷ ¸Þ´º¸¦ °°ÀÌ ¸¸µé¾îµµ »ó°ü¾ø´Ù. ±×¸®°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÑ´Ù.

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 ¸Þ½ÃÁö¸¦ º¸³»ÁֹǷΠÅëÁö ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ÇØ´çµÇ´Â 󸮸¦ ÇÏ¸é µÈ´Ù. ¿¹Á¦¿¡¼­´Â ¸Þ½ÃÁö ¹Ú½º¸¦ ¶ç¿ö Æ˾÷ ¸Þ´º°¡ ¼±ÅõǾúÀ½À» È®Àθ¸ ÇÏ¿´´Ù.

¿¹Á¦ 2

´ÙÀ½ ¿¹Á¦´Â Æ˾÷ ¸Þ´º¿¡¼­ ¼±ÅÃµÈ ¸Þ´º Ç׸ñÀ» ó¸®ÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀ» º¸¿©ÁØ´Ù.

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);
TrackPopupMenu( ...
PostMessage(hWnd, WM_NULL, 0, 0);

Âü°íÇÔ¼ö

TrackPopupMenuEx : µ¿ÀÏÇÑ ÇÔ¼öÀÌµÇ Æ˾÷ ¸Þ´º°¡ Ãâ·ÂµÇÁö ¸»¾Æ¾ß ÇÒ ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

Æ˾÷ ¸Þ´º¿¡ ´ëÇÑ ÀϹÝÀûÀÎ »ç¿ë¿¹´Â 19-2¿¡ ÀÖ´Ù.


written by http://www.winapi.co.kr