007 任务栏托盘弹出菜单

来源:互联网 发布:linux系统发展史 编辑:程序博客网 时间:2024/06/05 17:08

007 任务栏托盘弹出菜单

实现右下角托盘图标基本功能。

主要函数:Shell_NotifyIcon(dwMessage,pNotifyIconData)

                    dwMessage为以下参数:NIM_ADD 添加,NIM_DELETE 删除,NIM_MODIFY 修改

                    pNotifyIconData指向NOTIFYICONDATA结构


实现过程:1、填充NOTIFYICONDATA结构;

                    2、将函数写入WM_CREATE消息中;

                    3、在WM_DESTROY中添加删除操作。


资源地址:http://download.csdn.net/detail/u010849378/5479787


代码:

#include<windows.h>#include "resource.h"#define WM_TRAYNOTIFY   WM_USER+1// 自定义消息LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,   HINSTANCE hPrevInstance,   PSTR szCmdLine,   int iCmdShow){static TCHAR szAppName[]=TEXT("Window");HWNDhwnd;MSGmsg;WNDCLASSwndclass;wndclass.style= CS_HREDRAW | CS_VREDRAW;wndclass.cbClsExtra= 0;wndclass.cbWndExtra= 0;wndclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor= LoadCursor(NULL,IDC_ARROW);wndclass.hIcon= LoadIcon(NULL,IDI_APPLICATION);wndclass.hInstance= hInstance;wndclass.lpfnWndProc= WndProc;wndclass.lpszClassName= szAppName;wndclass.lpszMenuName= NULL;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("Error!"),szAppName,MB_ICONERROR);return 0;}hwnd=CreateWindow(szAppName,TEXT("Window"),  WS_OVERLAPPEDWINDOW,  CW_USEDEFAULT,CW_USEDEFAULT,  CW_USEDEFAULT,CW_USEDEFAULT,  NULL,NULL,hInstance,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static HINSTANCEhInstance;static NOTIFYICONDATANid;POINTpoint;HMENUhMenu;switch(message){case WM_CREATE:hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);/*托盘结构基本参数:*cbSize为结构大小,直接sizeof获取*hWnd为接受消息的窗口句柄*uID任务栏图标的标识符*uFlags表示hIcon、szTip、uCallbackMessage中合法部分NIF_MESSAGE,NIF_ICON,NIF_TIP 可连用*uCallbackMessage要发送的消息,其中lParam为所包含的鼠标消息种类WM_RBUTTONDOWN、WM_RBUTTONUP等wParam为发出消息的图标编号*hIcon图标句柄*szTip提示语句其他的拓展参数请参考其他文章*/Nid.cbSize= sizeof(NOTIFYICONDATA);Nid.hWnd= hwnd;Nid.hIcon= LoadIcon(NULL,IDI_APPLICATION);Nid.uFlags= NIF_ICON | NIF_MESSAGE ;Nid.uID= 1;Nid.uCallbackMessage =  WM_TRAYNOTIFY ;//自定义消息Shell_NotifyIcon(NIM_ADD,&Nid);return 0;case WM_COMMAND:switch(LOWORD(wParam)){case ID_TEST:MessageBox(NULL,TEXT("Success"),TEXT(""),MB_OK);return 0;}break;case WM_TRAYNOTIFY:SetFocus(hwnd);switch(lParam){case WM_RBUTTONDOWN:SendMessage(hwnd,WM_RBUTTONDOWN,0,0);//发送消息,实现弹出菜单return 0;}break;/*窗口内右键弹出菜单实现为了避免与托盘弹出菜单位置发生冲突,选则用GetCursorPos获取鼠标位置*/case WM_RBUTTONDOWN:GetCursorPos(&point);hMenu = LoadMenu(hInstance,TEXT("MENU1"));hMenu = GetSubMenu(hMenu,0);TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,point.x,point.y,0,hwnd,NULL);return 0;case WM_DESTROY:Shell_NotifyIcon(NIM_DELETE,&Nid);//删除托盘图标PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}


注:本例运用自建菜单。

原创粉丝点击