给托盘图标增加气球提示 收藏
先看一下下面这篇文章,可能对你会有帮助 http:blog.csdn.net/XXKKFF/archive/2007/05/06/1598526.aspx 在vc 6.0里要给托盘增加气球提示的确要费一番工夫 首先要到下面 http:www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm 下载新的sdk进行安装 安装之后,还要把这个新的sdk和visual studio关联起来 在开始菜单里有这样一个菜单项.手工关联的话,比较麻烦,这里就不说了 剩下的使用方法请看下面的注释 #define _WIN32_IE 0x0501 //必须定义这个,NOTIFYICONDATA的某些属性才可用
#define WM_TRAYMESSAGE WM_USER + 1 //我托盘图标相关的消息 #include <windows.h> #include <shellapi.h> //Shell_NotifyIcon #include "resource.h" //过程函数的返回值都是LRESULT,类型都是CALLBACK
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow) { HWND hwnd; //主窗口句柄,在CreateWindow中赋值 MSG msg; //消息变量,在GetMessage中使用 WNDCLASS wndclass; //窗口类 TCHAR* szAppName = TEXT("Tray"); //类名和窗口名 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //鼠标 wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标 wndclass.lpszClassName = szAppName; //类名 wndclass.cbClsExtra = 0; //类的额外参数 wndclass.cbWndExtra = 0; //窗口的额外参数.用于基于同一窗口类的窗口各自区分. //在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小 wndclass.lpszMenuName = NULL; //菜单名.可以用作子窗口的id wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口风格 wndclass.lpfnWndProc = WndProc; //窗口过程 wndclass.hInstance = hInstance; //包含窗口过程的实例句柄 if( !RegisterClass(&wndclass) ) //注册窗口类
return 0; hwnd = CreateWindow( //创建窗口 szAppName, //窗口类名 szAppName, //窗口标题 WS_OVERLAPPEDWINDOW, //窗口风格 CW_USEDEFAULT, //初始的x坐标 CW_USEDEFAULT, //初始的y坐标 CW_USEDEFAULT, //初始的宽度 CW_USEDEFAULT, //初始的高度 NULL, //父窗口 NULL, //菜单 hInstance, //和窗口相关的实例句柄 NULL //额外参数 ); ShowWindow( hwnd,nCmdShow ); //显示窗口 UpdateWindow( hwnd ); //更新窗口 while( GetMessage(&msg,NULL,0,0) ) //消息循环 { TranslateMessage(&msg); //将WM_XXXKEYXXX消息翻译为WM_CHAR消息 DispatchMessage(&msg); //传递消息到窗口过程 } return msg.wParam; //返回 } LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam ) { static NOTIFYICONDATA nid; //代表一个托盘图标的结构 static HMENU hMainMenu; //主菜单,主要是为了得到下面这个菜单 static HMENU hPopupMenu; //在托盘图标上右击时显示的菜单 static HINSTANCE hInstance; switch( message ) { case WM_TIMER: //NIF_INFO,NIIF_ERROR,szInfo等都只有在新的sdk中才有定义,且 //只有 _WIN32_IE >= 0x0501时才有定义 nid.uFlags = NIF_INFO; //这个标志使得可以显示气球提示 lstrcpy(nid.szInfo, TEXT("This is a Tray Icon!")); nid.dwInfoFlags = NIIF_ERROR; lstrcpy(nid.szInfoTitle, TEXT("TrayIcon")); Shell_NotifyIcon(NIM_MODIFY, &nid); //显示气球提示
return 0; case WM_CREATE: { hInstance = ((LPCREATESTRUCT)lParam)->hInstance; //加载菜单
hMainMenu = (HMENU)LoadMenu(hInstance, TEXT("TRAYMENU")); hPopupMenu = GetSubMenu(hMainMenu, 0); nid.cbSize = sizeof(nid);
//指定托盘的图标 nid.hIcon = (HICON)LoadIcon( hInstance, TEXT("TRAYICON") ); nid.hWnd = hwnd; //和我们的托盘图标相关的消息 //例如鼠标的单击,右击. //以及由气球提示触发的消息 nid.uCallbackMessage = WM_TRAYMESSAGE; nid.uID = 1; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; lstrcpy( nid.szTip, TEXT("This is a Tray Icon!")); //添加一个托盘图标
Shell_NotifyIcon(NIM_ADD, &nid); //每5秒显示一次气球
SetTimer(hwnd, 0, 10000, NULL); return 0; } case WM_DESTROY: //删除托盘图标 Shell_NotifyIcon(NIM_DELETE, &nid); PostQuitMessage(0); return 0; case WM_TRAYMESSAGE: { switch( lParam ) { case WM_LBUTTONDOWN: MessageBox(hwnd, TEXT("LBUTTONDOWN in TrayIcon!"), TEXT("TrayIcon"), MB_OK); return 0; case WM_RBUTTONDOWN: { POINT point; GetCursorPos( &point ); SetForegroundWindow(hwnd); TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN, point.x, point.y, 0, hwnd, NULL); return 0; } //处理由气球提示产生的通知 case NIN_BALLOONUSERCLICK: MessageBox(hwnd, "click in ballon!", "ballon", MB_OK); return 0; case NIN_BALLOONSHOW: MessageBox(hwnd, "ballon shown!", "ballon", MB_OK); return 0; case NIN_BALLOONTIMEOUT: MessageBox(hwnd, "ballon timeout!", "ballon", MB_OK); return 0; } } case WM_COMMAND: switch( LOWORD(wParam) ) { case IDM_TRAY_MESSAGEBOX: MessageBox(hwnd, TEXT("Menu Selected in TrayIcon!"), TEXT("TrayIcon"), MB_OK); return 0; case IDM_TRAY_QUIT: //删除托盘图标 Shell_NotifyIcon(NIM_DELETE, &nid); PostQuitMessage(0); return 0; } } return DefWindowProc( hwnd,message,wParam,lParam ); } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/XXKKFF/archive/2007/05/11/1605182.aspx
|
|