티스토리 뷰
목차
[MFC 강좌] 마우스 우클릭, 동적 메뉴 생성 이벤트
[MFC 강좌] MFC 마우스 우클릭 소스
- 프로젝트 - MenuExam.zip [클릭]
- 실행파일 - MenuExam.exe [클릭]
이번 MFC 강좌 주제는 이렇습니다. 『다이얼로그 버튼』에 마우스 우클릭을 했을 때, 아래 그림처럼 메뉴가 나오는 것이죠. MFC 동적 마우스 이벤트 예제입니다.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
MFC 강좌 시작합니다.
우선, MenuExam이란 프로젝트를 하나 만들고 리소스 추가를 눌러 줍니다.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
추가할 리소스는 Menu입니다. Menu를 선택하고 새로 만들기를 눌러주세요.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
저는 『MFC 강좌』를 위해 새로 생성된 메뉴를 아래처럼 바꿔봤습니다. 아래 메뉴가 마우스 우클릭했을 때 보이는 것이니 원하는 대로 편집하면 됩니다.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
이어서, 메인 다이얼로그에 버튼을 하나 추가하세요. 이번 MFC 강좌의 메인이나 다름없는 버튼입니다. 이 버튼 위에서 마우스 우클릭이 일어나면 메뉴가 생성된답니다.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
이어서, 마우스 우클릭 소스 코드입니다. MFC에서는 오른쪽 버튼을 누르면 WM_RBUTTONDOWN과 WM_CONTEXTMENU라는 두 개의 이벤트가 발생합니다.
WM_CONTEXTMENU |
팝업 메뉴(컨텍스트 메뉴)를 제어 |
WM_CONTEXTMENU |
OnContextMenu의 소스 코드를 정의 |
다행히 MFC 강좌를 위해 제가 일일이 코딩할 필요는 없었어요. 외국 블로거가 마우스 우클릭 관련하여 좋은 소스를 제공하고 있기에 이걸 편집해 사용합니다. 거의 편집할 게 없어서, 소스를 그대로 사용해도 무방합니다.
[C++ Mouse 제어 클릭] 좌표 응용 이벤트
- 마우스 우클릭 예제 : Using a Context Menu on a Control) [클릭]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 사용할 메뉴 불러오기 CMenu mnuPopupSubmit; mnuPopupSubmit.LoadMenu(IDR_MENU1);// 버튼의 포인터 얻어오기 CButton *pButton; pButton = reinterpret_cast<CButton *>(GetDlgItem(IDC_BUTTON1));// 버튼의 넓이 구하기 CRect Button1; pButton->GetWindowRect(&Button1);// 메뉴의 첫번째 아이템에 포인터 얻어오기 CMenu *mnuPopupMenu = mnuPopupSubmit.GetSubMenu(0); ASSERT(mnuPopupMenu); // 사용자가 우클릭한 버튼이 어떤 것인가 알아내기 // 왜냐면, 아무 버튼에나 마구 동작하면 안되니깐 if(Button1.PtInRect(point)) mnuPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); | cs |
그리고 마우스 우클릭과 좌클릭을 구분해 보기 위해서 아래처럼 간단한 메시지 박스도 추가합니다.
1 2 3 4 | void CMenuExamDlg::OnBnClickedButton1() { AfxMessageBox("왼쪽 버튼으로 누르셨군요"); } | cs |
여기까지, 프로젝트를 구성했다면, 우클릭을 통해서 메뉴가 생성되는 것을 확인할 수 있습니다.
맨 위에 첨부 파일을 확인하세요.
[MFC 강좌] 마우스 우클릭, 동적 메뉴 생성 이벤트