007 任务栏托盘弹出菜单

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");
	HWND		hwnd;
	MSG			msg;
	WNDCLASS	wndclass;

	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 HINSTANCE			hInstance;
	static NOTIFYICONDATA		Nid;
	POINT			point;
	HMENU			hMenu;

	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);
}


注:本例运用自建菜单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值