ÄÁÅýºÆ® ¸Þ´º(Context Menu)
ÄÁÅýºÆ® ¸Þ´º¶õ ¸¶¿ì½ºÀÇ ¿À¸¥ÂÊ ¹öưÀ» ´·¶À» ¶§ Ãâ·ÂµÇ´Â ÆË¾÷ ¸Þ´º¸¦ ¸»ÇÑ´Ù. »ç¿ëÀÚ°¡ ¸¶¿ì½º ¿ìÃø ¹öưÀ» ´©¸£¸é À©µµ¿ìÁî OS´Â WM_RBUTTONDOWN ¸Þ½ÃÁö ´ÙÀ½¿¡ WM_CONTEXTMENU ¸Þ½ÃÁö¸¦ ÇØ´ç À©µµ¿ì¿¡ º¸³½´Ù. À©µµ¿ìÁî 3.1¿¡´Â ¾ø¾ú´ø WM_CONTEXTMENU ¸Þ½ÃÁö´Â À©µµ¿ìÁî 95¿¡ »õ·Ó°Ô Ãß°¡µÈ °ÍÀ¸·Î »ç¿ëºóµµ°¡ ³ô¾ÆÁø ÄÁÅýºÆ® ¸Þ´ºÀÇ È°¿ëÀ» ¿ëÀÌÇÏ°Ô ÇÑ´Ù.
±×·³ ¸ÕÀú WM_CONTEXTMENU ¸Þ½ÃÁö¸¦ »ç¿ëÇÑ ¿¹¸¦ º¸ÀÚ.
¿ì¼± »õ·Î¿î SDI ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç´Ù. ¿©±â¼´Â ÇÁ·ÎÁ§Æ® À̸§À» Mouse ¶ó°í Á¤Çß´Ù.
ºä¿¡¼ ó¸®ÇÑ
°æ¿ì
¿©±â¼´Â µû·Î ¸Þ´º¸¦ ¸¸µéÁö ¾Ê°í, ¸ÞÀÎ ¸Þ´ºÀÇ Ã¹ ¹øÂ° ¸Þ´º "ÆÄÀÏ" À» È£ÃâÇÏ·Á°í ÇÑ´Ù.
Ŭ·¡½º À§Àúµå¸¦ »ç¿ëÇÏ¿© WM_CONTEXTMENU ¸Þ½ÃÁö¿¡ ´ëÇÑ Çڵ鷯¸¦ Ãß°¡ÇÑ´Ù. ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
void CCMouseView::OnContextMenu(CWnd* pWnd, CPoint point)
{
//
ºä¿¡¼ ¸ÞÀÎ ÇÁ·¹ÀÓÀÇ Æ÷ÀÎÅ͸¦ ¾ò°í
//
´Ù½Ã ¸ÞÀÎ ¸Þ´ºÀÇ Æ÷ÀÎÅ͸¦ ¾ò¾î¼,
//
SubMenuÀÇ Æ÷ÀÎÅ͸¦ ¾ò´Â´Ù.
CMenu
*pMainMenu = AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
pMainMenu->TrackPopupMenu(TPM_LEFTALIGN
|
TPM_RIGHTBUTTON,
point.x, point.y, this);
}
ÄÁÆ®·Ñ¿¡¼
ó¸®ÇÑ °æ¿ì
¾Õ¿¡¼ÀÇ ¿¹¿Í ´Ù¸£°Ô ¿©±â¼´Â µû·Î ¸Þ´º¸¦ ¸¸µé¾î ±× ¸Þ´º°¡ ÄÁÆ®·Ñ »ó¿¡¼ ÄÁÅØ½ºÆ® ¸Þ´º·Î Ãâ·ÂµÇµµ·Ï ÇÒ °ÍÀÌ´Ù.
1. Ãâ·ÂÇÒ ÇÑ ÆäÀÌÁöÀÇ ¸Þ´º¸¦ ¸¸µç´Ù. ID ´Â IDR_MENU1À¸·Î Çß´Ù. ¹°·Ð ÇÊ¿äÇÑ ´ë·Î ¹Ù²Ù¾î ¾²¸é µÈ´Ù. ¿©±â¼´Â Å×½ºÆ® ¿ëÀ̹ǷΠ¸Þ´º¿¡ ¾Æ¹« ³»¿ëÀ̳ª ³Ö¾îº¸ÀÚ. ½ÇÁ¦·Î »ç¿ëÇÒ ¶§´Â ¹°·Ð ÀڱⰡ ¿øÇÏ´Â ³»¿ëÀ» ³Ö´Â´Ù.
2. ¾Æ¹« ÄÁÆ®·ÑÀ̳ª »ó°ü¾øÁö¸¸ ¿©±â¼´Â »õ·Î ´ÙÀ̾ó·Î±×¸¦ ¸¸µé°í, ±× À§¿¡ ¹öưÀ» Çϳª ¸¸µç ´ÙÀ½¿¡ ±× ¹öư¿¡¼ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯Çϸé ÄÁÅØ½ºÆ® ¸Þ´º°¡ ¶ßµµ·Ï ÇÒ °ÍÀÌ´Ù.
±×·¯¹Ç·Î ID°¡ IDD_DIALOG1ÀÎ ´ÙÀ̾ó·Î±×¸¦ Çϳª ¸¸µé°í, ±× À§¿¡ ¹öưÀ» Çϳª ³õ¾Æ IDC_BUTTON_CONTEXT À̶ó´Â ID¸¦ ÁÖ¾ú´Ù. ÀÌ ¹öư¿¡¼ ÄÁÅØ½ºÆ® ¸Þ´º°¡ ¶ã °ÍÀÌ´Ù.
3. ´ÙÀ̾ó·Î±×¿¡ ¿¬°áµÉ Ŭ·¡½º¸¦ ¸¸µé°í, ±× Ŭ·¡½º¿¡¼ WM_CONTEXTMEUN Çڵ鷯¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
void CContextTest::OnContextMenu(CWnd* pWnd, CPoint point)
{
CRect
rc;
//¹öưÀÇ Æ÷ÀÎÅÍ
¾ò±â
CButton *pButton
= (CButton *)GetDlgItem(IDC_BUTTON_CONTEXT);
//
½ºÅ©¸° ÁÂÇ¥°è¸¦ ±âÁØÀ¸·Î ÇÑ »ç°¢Çü Á¤º¸
pButton->GetWindowRect(rc);
//
¸¶¿ì½º Ä¿¼°¡ ÄÁÆ®·Ñ ³»¿¡ ÀÖ´ÂÁö ÆÇ´Ü
if(rc.PtInRect(point))
{
CMenu
menu;
menu.LoadMenu(IDR_MENU1);
// ¸Þ´º ¸®¼Ò½º ·Îµå
//
»ç¿ëÇÒ ¼ºê ¸Þ´ºÀÇ °´Ã¼ Æ÷ÀÎÅÍ
CMenu*
pPopup = menu.GetSubMenu(0);
pPopup->TrackPopupMenu(TPM_LEFTALIGN
| TPM_RIGHTBUTTON,
point.x,
point.y, this);
}
}
(PS 1)
WM_RBUTTONDOWN ¸Þ½ÃÁöÀÇ Çڵ鷯¸¦ »ç¿ëÇÒ ¼öµµ Àִµ¥, ÀÌ·² °æ¿ì ´Ù¸¥ ÄÚµå´Â °ÅÀÇ µ¿ÀÏÇÏÁö¸¸ ÇÑ ÁÙÀÌ ´õ Æ÷ÇԵȴÙ. ´ÙÀ½À» º¸ÀÚ.
void CCMouseView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu
*pMainMenu = AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
ClientToScreen(&point);
// Ãß°¡µÈ ÄÚµå
pMainMenu->TrackPopupMenu(TPM_LEFTALIGN
| TPM_RIGHTBUTTON,
point.x,
point.y, this);
CView::OnRButtonDown(nFlags,
point);
}
(PS 2)
´ÙÀ½Àº TrackPopupMenu() ÇÔ¼öÀÇ Ã¹ ¹øÂ° ÀÎÀÚ¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù.
|
À§Ä¡ »ó¼ö |
¼³¸í |
|
TPM_LEFTALIGN |
¸¶¿ì½º Ä¿¼¸¦ ±âÁØÀ¸·Î ¿ìÃø¿¡ ÄÁÅØ½ºÆ® ¸Þ´º Ãâ·Â |
|
TPM_CENTERALIGN |
¸¶¿ì½º Ä¿¼¸¦ ±âÁØÀ¸·Î Áß¾Ó¿¡ ÄÁÅØ½ºÆ® ¸Þ´º Ãâ·Â |
|
TPM_RIGHTALIGN |
¸¶¿ì½º Ä¿¼¸¦ ±âÁØÀ¸·Î ÁÂÃø¿¡ ÄÁÅØ½ºÆ® ¸Þ´º Ãâ·Â |
|
TPM_LEFTBUTTON |
¸¶¿ì½º ÁÂÃø ¹öưÀ¸·Î ¸Þ´º Ç׸ñ ¼±Åà |
|
TPM_RIGHTBUTTON |
¸¶¿ì½º ¿ìÃø ¹öưÀ¸·Îµµ ¸Þ´ºÇ׸ñ ¼±Åà °¡´É |