컨택스트 메뉴(Context Menu)

 

 컨택스트 메뉴란 마우스의 오른쪽 버튼을 눌렀을 때 출력되는 팝업 메뉴를 말한다. 사용자가 마우스 우측 버튼을 누르면 윈도우즈 OS는 WM_RBUTTONDOWN 메시지 다음에 WM_CONTEXTMENU 메시지를 해당 윈도우에 보낸다. 윈도우즈 3.1에는 없었던 WM_CONTEXTMENU 메시지는 윈도우즈 95에 새롭게 추가된 것으로 사용빈도가 높아진 컨택스트 메뉴의 활용을 용이하게 한다.

그럼 먼저 WM_CONTEXTMENU 메시지를 사용한 예를 보자.

우선 새로운 SDI 프로젝트를 만든다. 여기서는 프로젝트 이름을 Mouse 라고 정했다.

 

뷰에서 처리한 경우

여기서는 따로 메뉴를 만들지 않고, 메인 메뉴의 첫 번째 메뉴 "파일" 을 호출하려고 한다.

 클래스 위저드를 사용하여 WM_CONTEXTMENU 메시지에 대한 핸들러를 추가한다. 코드는 다음과 같다.

 

컨트롤에서 처리한 경우

 앞에서의 예와 다르게 여기서는 따로 메뉴를 만들어 그 메뉴가 컨트롤 상에서 컨텍스트 메뉴로 출력되도록 할 것이다.

1. 출력할 한 페이지의 메뉴를 만든다. ID 는 IDR_MENU1으로 했다. 물론 필요한 대로 바꾸어 쓰면 된다. 여기서는 테스트 용이므로 메뉴에 아무 내용이나 넣어보자. 실제로 사용할 때는 물론 자기가 원하는 내용을 넣는다.

2. 아무 컨트롤이나 상관없지만 여기서는 새로 다이얼로그를 만들고, 그 위에 버튼을 하나 만든 다음에 그 버튼에서 마우스 오른쪽 버튼을 클릭하면 컨텍스트 메뉴가 뜨도록 할 것이다.

 그러므로 ID가 IDD_DIALOG1인 다이얼로그를 하나 만들고, 그 위에 버튼을 하나 놓아 IDC_BUTTON_CONTEXT 이라는 ID를 주었다. 이 버튼에서 컨텍스트 메뉴가 뜰 것이다.

3. 다이얼로그에 연결될 클래스를 만들고, 그 클래스에서 WM_CONTEXTMEUN 핸들러를 다음과 같이 작성한다.

 

(PS 1)

WM_RBUTTONDOWN 메시지의 핸들러를 사용할 수도 있는데, 이럴 경우 다른 코드는 거의 동일하지만 한 줄이 더 포함된다. 다음을 보자.

(PS 2)

 다음은 TrackPopupMenu() 함수의 첫 번째 인자에 대한 설명이다.

위치 상수

설명

TPM_LEFTALIGN

마우스 커서를 기준으로 우측에 컨텍스트 메뉴 출력

TPM_CENTERALIGN

마우스 커서를 기준으로 중앙에 컨텍스트 메뉴 출력

TPM_RIGHTALIGN

마우스 커서를 기준으로 좌측에 컨텍스트 메뉴 출력

TPM_LEFTBUTTON

마우스 좌측 버튼으로 메뉴 항목 선택

TPM_RIGHTBUTTON

마우스 우측 버튼으로도 메뉴항목 선택 가능