티스토리 뷰
1. API 메뉴
메뉴를 선택하면 WM_COMMAND 가 발생하고 LOWORD(wParam) 에 선택한 메뉴 ID가 전달된다.
case WM_COMMAND:
switch(LOWORD(wParam)) {
case 메뉴ID:
...
break;
}
break;
2. API 팝업메뉴
마우스 우측버튼을 누르면 보여지는 메뉴
WM_CONTEXTMENU 메시지 발생
LOWORD(lParam) : X좌표
HIWORD(lParam) : Y좌표
HMENU LoadMenu(HINSTANCE hInstance, LPCTSTR 메뉴이름포인터)
HMENU GetSubmenu(HEMNU hMenu, int nPos)
BOOL TrackPopupMenu(HMENU hMenu, UINT 메뉴정렬값, int x, int y, int 사용하지않는변수 0으로지정, HWND hWnd, CONST RECT* 사용하지않는변수 NULL)
<메뉴정렬값>
TPM_LEFTALIGN 마우스 포인터 기준으로 왼쪽 정렬
ALIGN, TPM_CENTERALIGN, TPM_TOPALIGN, TPM_BOTTOMALIGN, TPM_VCENTERALIGN
<동작설정값, 메뉴설정값과 OR
TPM_LEFTBUTTON 마우스 우측버튼 클릭했을때만 메뉴항목을 선택할 수 있다
TPM_RIGHTBUTTON 마우스 우측버튼 클릭했을때도 메뉴항목을 선택할 수 있다
TPM_NONOTIFY 메뉴 항목이 선택되었을때 통지 메시지를 보내지 않는다
TPM_RETURNCMD 메뉴 항목이 선택되었을때 선택된 메뉴 항목의 ID를 반환한다
팝업메뉴는 일반 메뉴와 별도의 ID로 메뉴 추가하고 메뉴 표시줄의 메뉴항목ID로 메뉴 등록(LoadMenu())해서 하위 메뉴 항목만(GetSubMenu())만 사용한다.
case WM_CONTEXTMENU:
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
HMENU Popup1 = LoadMenu(hInst, MAKEINTRESOURCE(팝업메뉴ID);
HMENU Popup2 = GetSubMenu(Popup1, 0);
TrackPopupMenu(Popup2, TMP_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
break;
팝업 메뉴를 리소스에 추가
IDR_POPUP MENU
BEGIN
POPUP "팝업메뉴"
BEGIN
MENUITEM "첫번째 팝업 메뉴", 32773
MENUITEM "두번째 팝업 메뉴", 32774
END
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HMENU myPop1;
HMENU myPop2;
POINT pt;
switch (message)
{
case WM_CONTEXTMENU:
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
myPop1 = LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP));
myPop2 = GetSubMenu(myPop1, 0); // 팝업 메뉴 myPop1의 하위메뉴를 지정, 첫번째 메뉴 위치는 0
TrackPopupMenu(myPop2, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
break;
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 메뉴 선택을 구문 분석합니다.
switch (wmId)
{
case ID_POPUP_SECOND:
MessageBox(hWnd, TEXT("두번째 팝업 메뉴선택"), TEXT("팝업메뉴"), MB_OK);
break;
case ID_POPUP_FIRST:
MessageBox(hWnd, TEXT("첫번째 팝업 메뉴선택"), TEXT("팝업메뉴"), MB_OK);
break; |
cs |