공부/MFC
Visual C++ 2008 MFC Chapter 10 메뉴~ - 4
졸가메
2011. 12. 8. 16:58
지금까지 사용한 메뉴 코드는 내부적으로 TrackPopupMenu()함수를 가지고 만들어진 것이라고 한다.
이 함수의 원형은 다음과 같다.
BOOL TrackPopupMenu(
마우스 우클릭으로 메뉴 띄우기.
CCommandDemoView 에 OnRButtonDown 메시지 핸들러를 추가하고 다음과 같이 입력한다.
화면에 서브메뉴 라는게 추가되어있는 이유는 그냥 추가했기 때문.
다른 메뉴를 만들듯이 만들면 된다.
특이한점은 서브 메뉴 와 마찬가지로 하위 메뉴가 있는 메뉴의 경우
ID가 없다는 것.[클릭 자체가 되지 않기 때문이다.]
그러니까 그림으로 표현하면 이렇게된다.
이런 식으로 이해하면 편하다.
이 함수의 원형은 다음과 같다.
BOOL TrackPopupMenu(
UINT nFlags, //메뉴 윈도우의 위치, 에니메이션효과 등 동작특성을 결정
int x, int y, //출력할 좌표 **반드시 스크린 기준
CWnd* pWnd, // WM_COMMAND 메시지를 전송할 윈도우 객체의 주소.
LPCRECT lpRect = NULL //이값은 현재 사용하지않음.
);
다음으로는 속성값들을 정리한 내용이다
마우스 우클릭으로 메뉴 띄우기.
CCommandDemoView 에 OnRButtonDown 메시지 핸들러를 추가하고 다음과 같이 입력한다.
void CCommandDemoView::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();
//CMainFrame 윈도우의 메뉴에 대한 포인터를 가져온다.
//CMainFrame 윈도우의 메뉴에 대한 포인터를 가져온다.
CMenu* pSubMenu = pMainMenu->GetSubMenu(4);
//메인 메뉴중에서 4번 인덱스의 서브메뉴에 대한 포인터를 가져온다.
//메인 메뉴중에서 4번 인덱스의 서브메뉴에 대한 포인터를 가져온다.
CPoint ptMenu = point;//스크린 기준으로 좌표 변환.
ClientToScreen(&ptMenu);
pSubMenu->TrackPopupMenu(TPM_LEFTBUTTON | TPM_LEFTALIGN, ptMenu.x, ptMenu.y, AfxGetMainWnd());
//WM_COMMAND 메시지가 메인 프레임 윈도우에 전달되도록 팝업 메뉴 윈도우를 출력한다.
//속성은 보다시피 왼클릭으로 내부 메뉴 클릭 지정 위치[마우스의 위치] 의 좌측정렬.
CView::OnRButtonDown(nFlags, point);
}
출력시 화면
출력시 화면
화면에 서브메뉴 라는게 추가되어있는 이유는 그냥 추가했기 때문.
다른 메뉴를 만들듯이 만들면 된다.
특이한점은 서브 메뉴 와 마찬가지로 하위 메뉴가 있는 메뉴의 경우
ID가 없다는 것.[클릭 자체가 되지 않기 때문이다.]
그러니까 그림으로 표현하면 이렇게된다.
이런 식으로 이해하면 편하다.