티스토리 뷰

프로그래밍/MFC

팝업메뉴 동적 생성

에어버스 2021. 7. 20. 14:03

트레이 팝업메뉴 동적 생성하기

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define _MSG_TRAYICON 1000
#define ID_TRAY_EXIT 201
 
BEGIN_MESSAGE_MAP(CMsgTransferDlg, CDialogEx)
    ...
    ON_MESSAGE(WM_USER + _MSG_TRAYICON, &CMsgTransferDlg::TrayIconMessage)
    ON_COMMAND(ID_TRAY_EXIT, &CMsgTransferDlg::OnTrayExit)
END_MESSAGE_MAP()
 
void CMsgTransferDlg::MakePopupMenu(HWND hWnd, int x, int y)
{
    CMenu menu;
    menu.CreateMenu(); // 비어 있는 최상위 메뉴를 만든 후 메뉴 객체와 연결
    CMenu menuPopup;
    menuPopup.CreatePopupMenu(); // 비어있는 팝업메뉴를 만든 후 메뉴 객체와 연결
    menuPopup.AppendMenuW(MF_STRING, ID_TRAY_EXIT, L"종료"); // 새 메뉴 항목을 메뉴 끝에 추가
    //menuPopup.AppendMenuW(MF_STRING, 202, L"초록");
    //menuPopup.AppendMenuW(MF_STRING, 203, L"파랑");
    menu.InsertMenu(0, MF_POPUP, (UINT_PTR)menuPopup.Detach(), L"팝업메뉴"); // 메뉴 0 에 팝업메뉴 삽입
 
    SetForegroundWindow(); // hWnd);//생성된팝업메뉴밖을클릭할때팝업닫기, 리소스 메뉴를 이용할때는 팝업메뉴 등록전에 호출해야 한다. 등록 후 호출하면 팝업메뉴 안 닫힘. 20201022
    CMenu* pTrayMenu = menu.GetSubMenu(0);
    pTrayMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, x, y, this);
 
    menu.DestroyMenu();
}
 
void CMsgTransferDlg::OnTrayExit() // 종료 메뉴클릭
{
    if (IDNO == AfxMessageBox(TEXT("메시지 전송 프로그램을 종료하겠습니까?"), MB_YESNO))
        return;
 
    CDialogEx::OnOK(); //PostQuitMessage(0); // WM_QUIT 보낸다.    
}
 
LRESULT CMsgTransferDlg::TrayIconMessage(WPARAM wParam, LPARAM lParam)
{
    // 등록된 트레이 아이콘을 클릭하면 다이얼로그를 볼수있게 한다.
    HMENU hMenu = NULL;
    POINT pos;
    if (lParam == WM_RBUTTONDOWN)
    {
        GetCursorPos(&pos);
        MakePopupMenu(GetSafeHwnd()/*hWnd*/, pos.x, pos.y); //팝업메뉴생성및출력
    }
    return 0L;
}
cs

 

 

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