Win32 API实现系统托盘
Win32 API实现系统托盘
这篇博客主要是讲述使用Win32 API编写一个系统托盘。实现的功能有:显示提示框、气泡、上下文菜单。要实现系
统托盘,主要用到的函数是Shell_NotifyIcon,用到的结构体是NOTIFYICONDATA。
当我们运行后,可以在任务栏中看到我们的托盘了
当我们鼠标放在托盘图标上时,单击右键就会出现上下文菜单,我的这个有两个菜单项,Exit和Hide。点击Exit退出程
序,点击Hide将会把窗口隐藏,当单击托盘图标时就可以显示隐藏的窗口了。具体效果可以下载源文件下来自己运行
看看。主要代码如下:
[cpp] view plaincopyprint?
01.LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
02.{
03. NOTIFYICONDATA nid ;
04. static HMENU hMenu ;
05. POINT point ;
06. HINSTANCE hInstance ;
07.
08. switch (message)
09. {
10. case WM_CREATE:
11. hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ;
12.
13. hMenu = LoadMenu (hInstance, TEXT("TuoPan")) ;
14. hMenu = GetSubMenu (hMenu, 0) ;
15.
16. nid.cbSize = sizeof (NOTIFYICONDATA) ;
17. nid.hWnd = hwnd ;
18. nid.uID = IDI_ICON1 ;
19. nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP | NIF_INFO;
20. nid.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)) ;
21. nid.uCallbackMessage = WMU_NOTIFY ;
22. //提示框内容
23. wcscpy_s(nid.szTip, szAppName) ;
24. //气泡通知
25. wcscpy_s(nid.szInfo, szAppName); //通知的内容
26. wcscpy_s(nid.szInfoTitle, L":)"); //气泡的标题
27. nid.uTimeout = 10000; //通知滞留的时间,ms为单位
28. nid.dwInfoFlags = NIIF_NONE; //图标
29.
30. Shell_NotifyIcon (NIM_ADD, &nid) ;
31.
32. return 0 ;
33.
34. case WM_COMMAND:
35. switch (LOWORD(wParam))
36. {
37. case IDM_EXIT:
38. SendMessage (hwnd, WM_DESTROY, wParam, lParam) ;
39. return 0 ;
40.
41. case IDM_HIDE:
42. ShowWindow(hwnd, SW_HIDE);
43. return 0;
44. }
45. return 0 ;
46.
47. case WMU_NOTIFY:
48. if(lParam == WM_RBUTTONDOWN)//托盘消息中lParam接受鼠标的行为