Skip to content

Instantly share code, notes, and snippets.

@fecf
Created June 13, 2021 23:08
Show Gist options
  • Save fecf/4eddd237eb045af8f595a775fe12b0e9 to your computer and use it in GitHub Desktop.
Save fecf/4eddd237eb045af8f595a775fe12b0e9 to your computer and use it in GitHub Desktop.
minimal windows app with tasktray icon
constexpr DWORD kNotifyTrayIcon = WM_APP + 100;
NOTIFYICONDATA g_nid;
HMENU g_hMenu;
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam) {
switch (uMsg) {
case WM_CREATE: {
g_hMenu = CreatePopupMenu();
MENUITEMINFO mii{};
mii.cbSize = sizeof(MENUITEMINFO);
::InsertMenu(g_hMenu, 0, MF_BYPOSITION | MF_STRING, 1000, L"exit");
g_nid = {};
g_nid.cbSize = sizeof(NOTIFYICONDATA);
g_nid.hWnd = hWnd;
g_nid.uID = 1010;
g_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
g_nid.uCallbackMessage = kNotifyTrayIcon;
SHSTOCKICONINFO sii{};
sii.cbSize = sizeof(sii);
::SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON, &sii);
g_nid.hIcon = sii.hIcon;
::lstrcpyW(g_nid.szTip, WND_NAME);
::Shell_NotifyIcon(NIM_ADD, &g_nid);
} break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 1000:
::Shell_NotifyIcon(NIM_DELETE, &g_nid);
::DestroyMenu(g_hMenu);
g_hMenu = NULL;
::PostQuitMessage(0);
break;
}
break;
case kNotifyTrayIcon:
if (wParam == 1010) {
switch (lParam) {
case WM_RBUTTONDOWN: {
POINT pt;
::GetCursorPos(&pt);
::SetForegroundWindow(hWnd);
::TrackPopupMenu(g_hMenu, TPM_LEFTALIGN | TPM_BOTTOMALIGN,
(int)pt.x, (int)pt.y, 0, hWnd, 0);
break;
}
default:
break;
}
}
break;
case WM_DESTROY:
break;
case WM_CLOSE:
break;
case WM_QUIT:
break;
default:
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
int main(int argc, char** argv) {
WNDCLASS wndClass = {0, WindowProc, 0, 0, hInstance, 0, 0, 0, 0, CLS_NAME};
::RegisterClass(&wndClass);
HWND hWnd = ::CreateWindow(CLS_NAME, WND_NAME, 0, 0, 0, 0, 0, 0, 0, hInstance, 0);
MSG msg;
while (::GetMessage(&msg, 0, 0, 0)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment