TrackPopupMenuEx

¿øÇü

BOOL TrackPopupMenuEx(HMENU hmenu, UINT fuFlags, int x, int y, HWND hwnd, LPTPMPARAMS lptpm);

MFC ¿øÇü

ÇØ´çÇÏ´Â ÇÔ¼ö ¾øÀ½

Àμö

¢ºhmenu : Ãâ·ÂÇÒ Æ˾÷ ¸Þ´ºÀÇ ÇÚµé. º¸Åë GetSubMenu ÇÔ¼ö·Î ±¸ÇÑ´Ù.

¢ºfuFlags : Æ˾÷ ¸Þ´º¸¦ Ãâ·ÂÇÒ ¿É¼Ç. À§Ä¡¿Í ¸Þ´º Ç׸ñ ¼±Åÿ¡ °üÇÑ ¿©·¯ °¡Áö ¿É¼ÇÀÌ ÀÖ´Ù.

¢º(x,y) : Æ˾÷ ¸Þ´º¸¦ Ãâ·ÂÇÒ È­¸é ÁÂÇ¥

¢ºhWnd : Æ˾÷ ¸Þ´ºÀÇ ºÎ¸ð À©µµ¿ì ÇÚµéÀ̸ç Æ˾÷ ¸Þ´º°¡ ¼±ÅõǾúÀ» ¶§ ÀÌ À©µµ¿ì·Î WM_COMMAND ¸Þ½ÃÁö°¡ Àü´ÞµÈ´Ù.

¢ºlptpm : Æ˾÷ ¸Þ´º°¡ Ãâ·ÂµÇÁö ¸»¾Æ¾ß ÇÒ ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù. ÇÊ¿ä¾øÀ» °æ¿ì NULL·Î ÁÙ ¼ö ÀÖ´Ù.

¸®ÅÏ

¼º°øÇϸé 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÏ¸ç ½ÇÆнà 0À» ¸®ÅÏÇÑ´Ù. uFlags¿¡ TPM_RETURNCMD Ç÷¡±×¸¦ ÁÖ¾úÀ» °æ¿ì ¸®ÅÏ°ªÀº ¼±ÅÃÇÑ ¸Þ´º Ç׸ñÀÇ ID°¡ µÇ¸ç Ç׸ñ ¼±ÅÃÀ» Ãë¼ÒÇϸé 0ÀÌ ¸®ÅϵȴÙ.

¼³¸í

TrackPopupMenu¿Í ¸¶Âù°¡Áö·Î Æ˾÷ ¸Þ´º¸¦ È­¸éÀ¸·Î Ãâ·ÂÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ µ¿ÀÛ°ú Ç÷¡±×¿¡ ´ëÇÑ ±âº»ÀûÀÎ »çÇ×Àº TrackPopupMenu¸¦ ¸ÕÀú Âü°íÇϱ⠹ٶó¸ç Ãß°¡ÀûÀÎ ±â´É¸¸À» ¼³¸íÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ¸¶Áö¸· Àμö lptpmÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ ±¸Á¶Ã¼À̸ç Æ˾÷ ¸Þ´º¿¡ ÀÇÇØ °¡·ÁÁöÁö ¸»¾Æ¾ß ÇÒ ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù.

typedef struct tagTPMPARAMS {
UINT cbSize;
RECT rcExclude;
} TPMPARAMS, *LPTPMPARAMS;

cbSize´Â ÀÌ ±¸Á¶Ã¼ÀÇ Å©±â°ªÀ» °¡Áö¸ç rcExclude´Â Æ˾÷ ¸Þ´º Ãâ·Â¿¡ Á¦¿ÜµÇ¾î¾ß ÇÒ »ç°¢ ¿µ¿ªÀ» ÁöÁ¤Çϴµ¥ ÀÌ ÁÂÇ¥´Â È­¸é ÁÂÇ¥ÀÌ´Ù. ¸¸¾à Æ˾÷ ¸Þ´º°¡ ¿­·Á ÀÖ´Â µ¿¾È¿¡ ¾Æ·¡ÂÊ È­¸éÀ» °è¼Ó ÂüÁ¶ÇØ¾ß ÇÑ´Ù¸é ÀÌ ±¸Á¶Ã¼·Î Æ˾÷ ¸Þ´º Ãâ·Â ±ÝÁö ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ °æ¿ì (x,y)°¡ ±ÝÁö ¿µ¿ª¿¡ ÀÖ´õ¶óµµ ÀÌ ¿µ¿ª ¹Ù±ùÀ¸·Î Æ˾÷ ¸Þ´º¸¦ À̵¿½ÃÄÑ ÁØ´Ù.

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â È­¸é»óÀÇ (100,100)-(400,150) ¿µ¿ª¿¡ Æ˾÷ ¸Þ´º°¡ Ãâ·ÂµÇÁö ¾Êµµ·Ï ÇÑ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	HMENU hMenu, hPopup;
	TPMPARAMS tp;
	RECT ert={100,100,400,150};
	char Mes[]="ÀÌ ¿µ¿ª¿¡´Â ¸Þ´º Ãâ·ÂÀÌ ±ÝÁöµÊ";

	switch(iMessage) {
	case WM_CONTEXTMENU:
		hMenu=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1));
		hPopup=GetSubMenu(hMenu, 0);

		tp.cbSize=sizeof(TPMPARAMS);
		tp.rcExclude=ert;
		ClientToScreen(hWnd,(LPPOINT)&tp.rcExclude);
		ClientToScreen(hWnd,(LPPOINT)&tp.rcExclude+1);
		TrackPopupMenuEx(hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_VERTICAL, 
			LOWORD(lParam), HIWORD(lParam), 
			hWnd, &tp);
		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_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		Rectangle(hdc,ert.left,ert.top,ert.right,ert.bottom);
		TextOut(hdc,ert.left+10,ert.top+10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥·Î º¯°æÇÑ ÈÄ rcExclude¿¡ ¼³Á¤ÇÏ¿´À¸¹Ç·Î ÀÌ ¿µ¿ªÀº Æ˾÷ ¸Þ´º¿¡ ÀÇÇØ °¡·ÁÁöÁö ¾Ê´Â´Ù. ´ÙÀ½Àº È­¸éÀÇ °¢ ºÎºÐ¿¡¼­ Æ˾÷ ¸Þ´º¸¦ ¿­¾úÀ» ¶§ÀÇ ¸ð¾çÀÌ´Ù.

Æ˾÷ ¸Þ´º°¡ Ãâ·Â ±ÝÁö ¿µ¿ª¿¡ ¿­·Á¾ß ÇÒ °æ¿ì ¼öÁ÷ À§Ä¡¸¦ Á¶Á¤ÇÔÀ¸·Î½á ÀÌ ¿µ¿ª ¹Ù±ù¿¡ ¸Þ´º¸¦ ¿­¾î ÁÜÀ¸·Î½á Æ˾÷ ¸Þ´º°¡ ¿­¸° µ¿¾È¿¡µµ ±ÝÁö ¿µ¿ªÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â TrackPopuMenu¿¡ ºñÇØ µÎ °³ÀÇ Ç÷¡±×¸¦ Ãß°¡·Î ÁöÁ¤ÇÒ ¼ö Àִµ¥ ÀÌ Ç÷¡±×µéÀº Æ˾÷ ¸Þ´º°¡ Ãâ·Â ±ÝÁö ¿µ¿ª¿¡ °ãÄ¥ °æ¿ì ¾î¶²½ÄÀ¸·Î Æ˾÷ ¸Þ´º¸¦ À̵¿½Ãų °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. TPM_HORIZONTALÀº Æ˾÷ ¸Þ´ºÀÇ ¼öÆò À§Ä¡¸¦ º¯°æÇϸç TPM_VERTICALÀº ¼öÁ÷ À§Ä¡¸¦ º¯°æÇÑ´Ù. ¿¹Á¦´Â ¼öÁ÷ À§Ä¡¸¦ º¯°æÇϵµ·Ï ÀÛ¼ºµÇ¾î Àִµ¥ ¼öÆò À§Ä¡¸¦ º¯°æÇϵµ·Ï ¼öÁ¤ÇÏ¸é ´ÙÀ½°ú °°ÀÌ Æ˾÷ ¸Þ´º°¡ ¿­¸°´Ù.

Âü°íÇÔ¼ö

TrackPopupMenu : Ãâ·Â ±ÝÁö ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ¾ø´Â °Í ¿Ü¿¡´Â ÀÌ ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

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


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