티스토리 뷰

프로그래밍/API

API 메뉴

에어버스 2016. 4. 25. 18:53

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

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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 27 28
29 30