好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 Victory.ms 于 2012-8-19 19:52 编辑
这里我用是的VS2010 ,首先新建一个WIN32项目—>选择windows应用程序—>勾选上空项目—>点击完成。
让后在资源处右击添加资源文件。选择Dialog 然后再添加ICON图标文件导入一个存在的ico图标文件.
最后新建一个.cpp文件。
添加代码
//本例中的对话框ID:IDD_DIALOG 按钮ID: IDC_BUTTON1 名称:“最小化”
#include"resource.h"
#include<stdio.h>
#include<Windows.h>
#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,MAKEINTRESOURC(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://左键双击
ShowWindow(hDlg,SW_SHOW);//显示窗口
break;
default:
break;
}
break;
case WM_CLOSE://关闭窗口
EndDialog(hDlg,0);
DestroyWindow(hDlg);
break;
default:
break;
}
return 0;
}源码 以及相关的函数用法打包了。
Win32托盘图标(非MFC).rar
(333.28 KB, 下载次数: 16)
|
|