|
1 | 1 | #include "window.h" |
2 | 2 |
|
3 | 3 | telemetry* telemetry_m = NULL; |
| 4 | +HMENU trayIconMenu; |
4 | 5 |
|
5 | 6 | window::window(/*bootstrapper* bootstrap*/) : dlg_main_b(true)/*, license(NULL)*//*, bootstrap(bootstrap)*/ |
6 | 7 | { |
@@ -81,28 +82,41 @@ LRESULT window::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHan |
81 | 82 |
|
82 | 83 | LRESULT window::OnTrayNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled) |
83 | 84 | { |
| 85 | + if (trayIconMenu != NULL) { |
| 86 | + DestroyMenu(trayIconMenu); |
| 87 | + trayIconMenu = NULL; |
| 88 | + } |
| 89 | + |
84 | 90 | switch (LOWORD(lParam)) |
85 | 91 | { |
86 | | - case WM_LBUTTONDBLCLK: |
| 92 | + case WM_LBUTTONUP: |
87 | 93 | if (bIsVisible) { |
88 | 94 | this->ShowWindow(SW_HIDE); |
89 | 95 | bIsVisible = false; |
90 | | - } else { |
| 96 | + } |
| 97 | + else { |
91 | 98 | this->ShowWindow(SW_SHOW); |
92 | 99 | this->BringWindowToTop(); |
93 | 100 | bIsVisible = true; |
94 | 101 | } |
95 | 102 | break; |
96 | 103 | case WM_RBUTTONUP: |
97 | | - |
98 | | - /*POINT lpClickPoint; |
99 | | -
|
100 | | - UINT uFlag = MF_BYPOSITION | MF_STRING; |
101 | | - GetCursorPos(&lpClickPoint); |
102 | | -
|
103 | | - HMENU hPopMenu = CreatePopupMenu(); |
104 | | - InsertMenu(hPopMenu, 0xFFFFFFFF, MF_BYPOSITION | MF_STRING, ID_POPUP_EXIT, _T("Exit"); |
105 | | -*/ |
| 104 | + trayIconMenu = CreatePopupMenu(); |
| 105 | + |
| 106 | + UINT menuFlags = MF_BYPOSITION | MF_STRING; |
| 107 | + InsertMenuW(trayIconMenu, -1, menuFlags, ID_TRAYMENU_SHOWHIDE, _T("Show/hide")); |
| 108 | + InsertMenuW(trayIconMenu, -1, menuFlags, ID_FILE_EXIT, _T("Exit")); |
| 109 | + |
| 110 | + POINT lpClickPoint; |
| 111 | + GetCursorPos(&lpClickPoint); |
| 112 | + |
| 113 | + int nReserved = 0; |
| 114 | + |
| 115 | + TrackPopupMenu(trayIconMenu, |
| 116 | + TPM_RIGHTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON, |
| 117 | + lpClickPoint.x, lpClickPoint.y, |
| 118 | + nReserved, this->m_hWnd, NULL |
| 119 | + ); |
106 | 120 | break; |
107 | 121 | } |
108 | 122 | return 0; |
@@ -166,3 +180,32 @@ LRESULT window::OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, |
166 | 180 | PostQuitMessage(0); |
167 | 181 | return 0; |
168 | 182 | } |
| 183 | + |
| 184 | +LRESULT window::OnTrayMenuExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) |
| 185 | +{ |
| 186 | + if (trayIconMenu != NULL) { |
| 187 | + DestroyMenu(trayIconMenu); |
| 188 | + trayIconMenu = NULL; |
| 189 | + } |
| 190 | + PostQuitMessage(0); |
| 191 | + |
| 192 | + return 0; |
| 193 | +} |
| 194 | + |
| 195 | +LRESULT window::OnTrayMenuShowHide(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) |
| 196 | +{ |
| 197 | + if (trayIconMenu != NULL) { |
| 198 | + DestroyMenu(trayIconMenu); |
| 199 | + trayIconMenu = NULL; |
| 200 | + } |
| 201 | + if (bIsVisible) { |
| 202 | + this->ShowWindow(SW_HIDE); |
| 203 | + bIsVisible = false; |
| 204 | + } |
| 205 | + else { |
| 206 | + this->ShowWindow(SW_SHOW); |
| 207 | + this->BringWindowToTop(); |
| 208 | + bIsVisible = true; |
| 209 | + } |
| 210 | + return 0; |
| 211 | +} |
0 commit comments