Win32托盘图标 - C语言实现

#include"resource.h"
#include<stdio.h>
#include<Windows.h>
//#include <CommCtrl.h>
//#pragma comment(lib,"comctl32.lib")
#define WM_NOTIFY_ICON WM_USER+100//自定义消息  处理托盘图标
#define IDC_BUTTON_EXIT WM_USER+101//自定义退出程序消息
#define IDC_BUTTON_SHOW WM_USER+102//自定义显示窗口消息
HINSTANCE hIns=NULL;
HWND hDlg=NULL;
LRESULT CALLBACK DlgProc(HWND hDlgMain,UINT uMsg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstcanc,LPSTR lpCmdLine,int nShowCmd)
{
	hIns=hInstance;
	DialogBox(hIns,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)DlgProc);
	return 0;
}


LRESULT CALLBACK DlgProc(HWND hDlgMain,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	hDlg=hDlgMain;
	switch(uMsg)
	{
	case WM_INITDIALOG://加载图标
		SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1)));
		SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1)));
		break;
	case WM_PAINT:
		{
		NOTIFYICONDATA IconData;//任务栏托盘图标区消息结构
		IconData.hWnd=hDlg;//窗口句柄
		IconData.uID=IDI_ICON1;//图标ID
		IconData.uFlags=NIF_MESSAGE |NIF_ICON;//标志,消息和图标有效
		IconData.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//结构大小
		IconData.hIcon=LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));//图标句柄
		IconData.uCallbackMessage=WM_NOTIFY_ICON;//回调消息(处理托盘图标消息)自定义
		Shell_NotifyIcon(NIM_ADD,&IconData);//向任务栏发送消息		
		}
		break;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{

	      case IDC_BUTTON1://按下最小化按钮
			  {
				NOTIFYICONDATA IconData;
				IconData.hWnd = hDlg;
				IconData.uID = IDI_ICON1;
				IconData.hIcon = LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));
				IconData.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
				IconData.uFlags = NIF_MESSAGE|NIF_ICON;
				IconData.uCallbackMessage = WM_NOTIFY_ICON;
				Shell_NotifyIcon(NIM_ADD,&IconData);
				ShowWindow(hDlg,SW_HIDE);//隐藏界面
				 
			  }
			  break;
		  case IDC_BUTTON_SHOW:
			  ShowWindow(hDlg,SW_SHOW);
		     break;
		  case IDC_BUTTON_EXIT:
			  {
				  NOTIFYICONDATA IconData;
				IconData.hWnd = hDlg;
				IconData.uID = IDI_ICON1;
				IconData.hIcon = LoadIcon(hIns,MAKEINTRESOURCE(IDI_ICON1));
				IconData.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
				IconData.uFlags = NIF_MESSAGE|NIF_ICON;
				IconData.uCallbackMessage = WM_NOTIFY_ICON;
				Shell_NotifyIcon(NIM_DELETE,&IconData);
				EndDialog(hDlg,0);
		        DestroyWindow(hDlg);
			  }
			  break;
		  default:
			  break;
		}
		break;
	case WM_NOTIFY_ICON://处理托盘图标消息
		switch(lParam)
		{
		case WM_RBUTTONUP://右键点击
			{
				tagPOINT point;//鼠标坐标结构
				GetCursorPos(&point);//得到鼠标当前位置
				HMENU hMenu;//菜单句柄
				hMenu=CreatePopupMenu();//创建下拉式菜单
				//在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项
				AppendMenu(hMenu,MF_STRING,IDC_BUTTON_SHOW,"显示");//菜单项 字符形式
				AppendMenu(hMenu,MF_SEPARATOR,0,NULL);//增加一条分割线
			    AppendMenu(hMenu,MF_STRING,IDC_BUTTON_EXIT,"退出");
				TrackPopupMenu(hMenu,TPM_LEFTALIGN,point.x,point.y,NULL,hDlg,NULL);
			}
			break;
		case WM_LBUTTONDBLCLK://左键双击
			    Sleep(200);
				ShowWindow(hDlg,SW_SHOW);//显示窗口
				break;
		default:
			break;
		}
		break;
	case WM_CLOSE:
		EndDialog(hDlg,0);
		DestroyWindow(hDlg);
		break;
	default:
		break;
	}
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值