티스토리 뷰
트레이 팝업메뉴 동적 생성하기
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 |