팜업메뉴(popup Menu)는 윈도우에서 마우스 오른쪽 버튼이 눌러지면 활성화 되는 메뉴로 주로 사용된다.
메뉴 생성성시 메뉴가 생성되는 윈도우를 설정해 주게 되어 있다.CWnd* pWnd에 부모 윈도우를 지정하게 된다.
BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );
단순하게 생각해서 메뉴가 보여지는 윈도우에서 메뉴를 생성하고
CMenu menu;
menu.LoadMenu(IDR_MENU);
CMenu * menu1 = menu.GetSubMenu(1); //WM_SET_ENABLE
menu1->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y,this);
메뉴를 클릭하면 이벤트가 해당 윈도우에 전달 되는 개념이다,
이벤트 핸들러를 다음과 같이 구성된다.
ON_UPDATE_COMMAND_UI(WM_SET_ENABLE, OnUpdateSEtEnableUI)
OnUpdateSEtEnableUI(CCmdUI* pCmdUI)
{
}
그런데 부모윈도우를
TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y,this);
와 같이 사용하면 이벤트는 처리되지 않는다???
문법적으로 개념적으로 이사이 없어 보이는데 ????
이럴때는 아래 코드와 같이 부모윈도우를 AfxGetMainWnd() 로 처리하자
CMenu menu;
menu.LoadMenu(IDR_MENU);
CMenu * menu1 = menu.GetSubMenu(1);
menu1->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
CMenu가 FrameWnd에 속하므로 View에서 처리를 하지 않도록 구성된듯 한데.
이렿게 되어야 하는 이유는 다음에 생각 하기로 하고 우선은 그냥 사용하자.
'개발언어 > c++' 카테고리의 다른 글
MFC 리스트의 열 높이 조절(Resize Row Height of CListCtrl) (0) | 2017.08.17 |
---|---|
MFC 문자열 배열 상수(#define CString[]),#define 문자열 (1) | 2017.08.15 |
CImageList에서 Bitmap 추출하여 Menu에 이미지 달기 (0) | 2017.08.09 |
CMenu에 Image 추가하기 (0) | 2017.08.09 |
소스 수정(편집)과 동시에 파일 적용(Visual Studio) apply code changes (0) | 2017.08.09 |