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);}
注:本例运用自建菜单。
- 007 任务栏托盘弹出菜单
- 制作任务栏托盘菜单
- 实例004 任务栏托盘菜单
- Qt任务栏,托盘栏,托盘菜单,图标等操作
- 任务栏托盘
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
- Java程序添加托盘图标和托盘弹出菜单
- VC 托盘编程及弹出菜单
- VC 托盘编程及弹出菜单
- VC++任务栏托盘图标及右键菜单实现
- Qt学习九:控件六:任务栏托盘菜单
- 任务栏弹出菜单的标准方式
- Win32 替换系统任务栏弹出菜单
- 关于任务栏/任务栏托盘编程
- delphi任务栏托盘写法
- VC实现任务栏托盘
- VC++实现任务栏托盘
- MFC实现托盘图标及弹出菜单(Popup menu)
- 如何取得Win7文件的管理员权限
- GDB详解
- Linux挂接命令(mount)的使用方法
- Linux Ubuntu上架设FTP
- iOS -- 摄像头/相册获取图片,压缩图片,上传服务器
- 007 任务栏托盘弹出菜单
- poj 2533 Longest Order Sequence
- [分享]菜鸟简单建立FTP的方法
- SecureCRT的连接和乱码处理
- Access 中的数据导入sql server
- oracle用老的控制文件备份恢复新建的数据文件
- 【免费QQ用户也能保存聊天记录备份与恢复】
- 计算机中带符号的整数为何采用二进制的补码进行存储
- Unity3D中角色的动画脚本的编写(一)