본문 바로가기
C++ 200제/코딩 IT 정보

[MFC 강좌] 마우스 우클릭, 동적 메뉴 생성 이벤트로 UI 만들기

by vicddory 2018. 1. 17.

[MFC 강좌] 마우스 우클릭, 동적 메뉴 생성 이벤트 


[MFC 강좌] MFC 마우스 우클릭 소스


이번 MFC 강좌 주제는 이렇습니다. 『다이얼로그 버튼』에 마우스 우클릭을 했을 때, 아래 그림처럼 메뉴가 나오는 것이죠. MFC 동적 마우스 이벤트 예제입니다.



MFC 강좌 마우스[C++ Mouse 제어 클릭] 좌표 응용 이벤트



MFC 강좌 시작합니다.

우선, MenuExam이란 프로젝트를 하나 만들고 리소스 추가를 눌러 줍니다.



MFC 마우스 이벤트[C++ Mouse 제어 클릭] 좌표 응용 이벤트


추가할 리소스는 Menu입니다. Menu를 선택하고 새로 만들기를 눌러주세요.



MFC 마우스 우클릭 이벤트[C++ Mouse 제어 클릭] 좌표 응용 이벤트



저는 『MFC 강좌』를 위해 새로 생성된 메뉴를 아래처럼 바꿔봤습니다. 아래 메뉴가 마우스 우클릭했을 때 보이는 것이니 원하는 대로 편집하면 됩니다.



MFC 강좌, 마우스 우클릭 이벤트[C++ Mouse 제어 클릭] 좌표 응용 이벤트



이어서, 메인 다이얼로그에 버튼을 하나 추가하세요. 이번 MFC 강좌의 메인이나 다름없는 버튼입니다. 이 버튼 위에서 마우스 우클릭이 일어나면 메뉴가 생성된답니다.



마우스 MFC 우클릭 메뉴[C++ Mouse 제어 클릭] 좌표 응용 이벤트



이어서, 마우스 우클릭 소스 코드입니다. MFC에서는 오른쪽 버튼을 누르면 WM_RBUTTONDOWN과 WM_CONTEXTMENU라는 두 개의 이벤트가 발생합니다.


 WM_CONTEXTMENU

 팝업 메뉴(컨텍스트 메뉴)를 제어

 WM_CONTEXTMENU

 OnContextMenu의 소스 코드를 정의


다행히 MFC 강좌를 위해 제가 일일이 코딩할 필요는 없었어요. 외국 블로거가 마우스 우클릭 관련하여 좋은 소스를 제공하고 있기에 이걸 편집해 사용합니다. 거의 편집할 게 없어서, 소스를 그대로 사용해도 무방합니다. 



MFC 강좌 마우스 이벤트[C++ Mouse 제어 클릭] 좌표 응용 이벤트




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 강좌] 마우스 우클릭, 동적 메뉴 생성 이벤트

댓글