-
- 마우스 오른쪽 버튼 클릭 시 화면에 즉시 표시되는 메뉴
- 특정 환경(혹은 상황)에 특화된 메뉴
- Context 메뉴 - WM_RBUTTONDOWN 메시지를 처리하는 방식을 권장
- 마우스 클릭에는 Down과 Up이 있다.
우리가 F5키를 눌러 실행하면 윈도우창이 나온다. 여기서 우클릭을 자주 사용하는 부분은 흰 바탕(view)이다.
View클래스에 WM_RBUTTONDOWN 이벤트를 추가해주었다.
팝업메뉴는 리소스뷰에서 따로 만들어준뒤, ID값은 IDR_MENU_POPUP으로 바꾸었다.
Resoure.h를 include해주고
void CMenuSampleView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. CMenu menu; menu.LoadMenu(IDR_MENU_POPUP); // 메뉴를 로딩 하겠다. CMenu *pSubMenu = menu.GetSubMenu(0); pSubMenu->TrackPopupMenu( TPM_LEFTBUTTON | TPM_LEFTALIGN, 300, 300, this); CView::OnRButtonDown(nFlags, point); }
menu를 로딩해주는 코드를 작성하였다.
팝업에서 메뉴를 불러오고, 팝업 메뉴는 인덱스 0번 자리이기때문에 GetSubMenu(0)이 들어간다.
TrackPopupMenu는 실제로 팝업 메뉴를 띄우는 함수로, 300, 300은 고정 좌표이다.
실제로 내가 실행해서 마우스 우클릭을 눌렀을때 엉뚱한곳에서 팝업이 나온다.
따라서 트랙 팝업 메시지를 사용할 때는 스크린 기준 좌표를 사용해야 한다.
CPoint ptPopup = point; this->ClientToScreen(&ptPopUp);
point는 클라이언트 뷰 윈도우 기준이고, 그걸 스크린 기준으로 바꾼다.
그럼 고정좌표 대신 x와 스크린 기준의 y로 팝업의 위치를 변경할 수 있다.
만약 Test01, Test02 중 한개는 Disable하고싶다면 다음과같이 ID값을 넣어준뒤 EnableMenuItem함수를 사용할 수 있다.
pSubMenu->EnableMenuItem(ID_POPUP_TEST01, MF_DISABLED);
'MFC' 카테고리의 다른 글
렌더링 시점과 DC에 대한 이해 , RGB컬러 (0) 2025.04.14 툴바와 상태바 (0) 2025.04.13 토글 메뉴 (0) 2025.04.09 다른 메뉴 제어하기와 PostMessage() 함수 (0) 2025.04.07 여러 곳에 핸들러 등록 (0) 2025.04.07 - 마우스 오른쪽 버튼 클릭 시 화면에 즉시 표시되는 메뉴