vc添加任务栏托盘图标
来源:互联网 发布:苹果相机软件 编辑:程序博客网 时间:2024/05/17 03:44
令一方面添加了托盘图标的程序比较方便用户进行退出等操作,而且有时候我们可以添加一些信息,让用户移动到图标上时候显示。最后还可以搞个简单点的动画方案,如qq登陆时候左看看右看看。
要实现这些我们先看一个结构:NOTIFYICONDATA官方定义为
NOTIFYICONDATA 结构体说明
包含系统需要的用来传递托盘区域消息的信息。编辑本段格式
typedef struct _NOTIFYICONDATA { DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; TCHAR szTip[64]; DWORD dwState; DWORD dwStateMask; TCHAR szInfo[256]; union { UINT uTimeout; UINT uVersion; }; TCHAR szInfoTitle[64]; DWORD dwInfoFlags; GUID guidItem; } NOTIFYICONDATA, *PNOTIFYICONDATA;编辑本段成员说明
cbSize 结构体的大小,以字节为单位。 hWnd 窗口的句柄。标示的窗口用来接收与托盘图标相关的消息。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标。 uID 应用程序定义的任务栏图标的标识符。Shell_NotifyIcon函数调用时,hWnd和uID成员用来标示具体要操作的图标。通过将多次调用,你可以使用不同的uID将多个图标关联到一个窗口hWnd。 uFlags 此成员表明具体哪些其他成员为合法数据(即哪些成员起作用)。此成员可以为以下值的组合: NIF_ICON hIcon成员起作用。 NIF_MESSAGE uCallbackMessage成员起作用。 NIF_TIP szTip成员起作用。 NIF_STATE dwState和dwStateMask成员起作用。 NIF_INFO 使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。 NIF_GUID 保留。 uCallbackMessage 应用程序定义的消息标示。当托盘图标区域发生鼠标事件或者使用键盘选择或激活图标时,系统将使用此标示向由hWnd成员标示的窗口发送消息。消息响应函数的wParam参数标示了消息事件发生的任务栏图标,lParam参数根据事件的不同,包含了鼠标或键盘的具体消息,例如当鼠标指针移过托盘图标时,lParam将为WM_MOUSEMOVE。 hIcon 增加、修改或删除的图标的句柄。注意,windows不同版本对于图标有不同要求。Windows XP可支持32位。 szTip 指向一个以\0结束的字符串的指针。字符串的内容为标准工具提示的信息。包含最后的\0字符,szTip最多含有64个字符。 对于Version 5.0 和以后版本,szTip最多含有128个字符(包含最后的\0字符)。 dwState Version 5.0,图标的状态,有两个可选值,如下: NIS_HIDDEN 图标隐藏 NIS_SHAREDICON 图标共享 dwStateMask Version 5.0. 指明dwState成员的那些位可以被设置或者访问。比如设置此成员为NIS_HIDDEN,将导致只有hidden状态可以被获取。 szInfo Version 5.0. 指向一个以\0结束的字符串的指针。字符串的内容为气球提示内容。最多含有255个字符。如果要移除已经存在的气球提示信息,设置uFlags成员为NIF_INFO,同时将szInfo设为空。 uTimeout 和uVersion成员为联合体。uTimeout表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失。系统默认气球提示的超时时间最小值为10秒,最大值为30秒。如果设置的uTimeout的值小于10将设置最小值,如果大于30将设置最大值。将超时时间分为最大最小两种,是因为解决不同图标的气球提示同时弹出的问题,详细内容请参考MSDN中NOTIFYICONDATA结构体说明的remarks。 uVersion Version 5.0. 和uTimeout成员为联合体。用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口。请参考Shell_NotifyIcon函数的说明获取更多信息。只有当使用Shell_NotifyIcon函数发送NIM_SETVERSION消息时,此成员才有作用。可选的值如下: 0 使用Windows 95风格。针对Windows 2000版本之前的windows设计的软件请使用此值。 NOTIFYICON_VERSION 使用Windows 2000风格。 针对Windows 2000版本以及以后版本的windows设计的软件请使用此值。 szInfoTitle Version 5.0. 指向一个以\0结束的字符串的指针。字符串的内容为气球提示的标题。此标题出现在气球提示框的上部,最多含有63个字符。 dwInfoFlags Version 5.0. 设置此成员用来给气球提示框增加一个图标。增加的图标出现在气球提示标题的左侧,注意如果szInfoTitle成员设为空字符串,则图标也不会显示。可选值如下: NIIF_ERROR 错误图标。 NIIF_INFO 信息图标。 NIIF_NONE 没有图标。 NIIF_USER 使用用户使用hIcon成员指明的图标,要求Windows XP Service Pack 2 (SP2)或以后系统。 NIIF_WARNING 警告图标。 NIIF_ICON_MASK Version 6.0. 保留。 NIIF_NOSOUND Version 6.0. 禁止播放相应声音。 guidItem Version 6.0. 保留。看着头晕,还是从我的一个程序中的实例入手
先在xxDlg.h中定义结构
NOTIFYICONDATA tnd;
我们一般定义为整个类都能用到的,这样子就可以在改动时候只改动某个参数就ok了。
在BOOL CGangwangDlg::OnInitDialog()中开始使用:
tnd.cbSize=sizeof(NOTIFYICONDATA); //结构体得大小
tnd.hWnd=this->m_hWnd; //句柄,我们用窗口句柄就ok了
tnd.uID=IDR_MAINFRAME;
tnd.uFlags=NIF_MESSAGE |NIF_ICON |NIF_TIP; //支持消息,图标,还有鼠标移动上去提示
tnd.uCallbackMessage=WM_LIBEN; //当点击或者其他操作是发送给程序的消息
tnd.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); //图标先载入我们的程序图标www.chaochaoblog.com
strcpy(tnd.szTip,"吵吵登陆器v3.0"); //提醒的文字
Shell_NotifyIcon(NIM_ADD,&tnd);//都设置完了后添加到托盘中去,记住这个函数哦
我们先看消息映射
在头文件中定义消息
#define WM_LIBEN (WM_USER + 101)
在该类的proteced中添加消息映射
afx_msg void OnLIBEN(WPARAM wParam, LPARAM lParam);
然后回到cpp中再次关联消息和函数
ON_MESSAGE(WM_LIBEN, OnLIBEN)
之后就添加消息响应函数了
void CGangwangDlg::OnLIBEN(WPARAM wParam, LPARAM lParam)
{
if(lParam==WM_RBUTTONDOWN || lParam==WM_RBUTTONUP)//右键按下消息
{
CMenu popMenu; //这里你可以做你自己的事情了,我是弹出一个菜单
popMenu.CreatePopupMenu();
//注意每个 都需要一个消息对应 用oncommand来映射
popMenu.AppendMenu(MF_STRING,IDM_MENU_HIDESHOWWINDOW,strShowHide);
popMenu.AppendMenu(MF_STRING,IDM_MENU_CHANGEBACK,"更换皮肤");
popMenu.AppendMenu(MF_STRING,IDM_MENU_EXITUSER,"退出账号");
popMenu.AppendMenu(MF_STRING,IDM_MENU_EXIT, "退出");
SetForegroundWindow();
CPoint point;
GetCursorPos(&point);
::TrackPopupMenu(popMenu.m_hMenu,TPM_LEFTALIGN,point.x,point.y,0,::AfxGetApp()->GetMainWnd()->m_hWnd,NULL);
popMenu.DestroyMenu();
}
}
搞完了消息映射我们再看看动画怎么做。
其实也很简单,搞几个ico先加载到资源里面去,然后用一个time去更换图标就好了
看看我的代码
void CGangwangDlg::ChangeIcon()
{
if(nIconID==IDI_ICON1)
{
nIconID=IDI_ICON2;
}
else if(nIconID==IDI_ICON2)
{
nIconID=IDI_ICON4;
}
else if(nIconID==IDI_ICON3)
{
nIconID=IDI_ICON1;
}
else
{
nIconID=IDI_ICON3;
}
tnd.hIcon=tnd.hIcon=AfxGetApp()->LoadIcon(nIconID);
Shell_NotifyIcon(NIM_MODIFY,&tnd);//将tnd结构更改应用到托盘中去
}
我这个只用到了三个ico然后在timer消息中调用就好了!
原文链接:http://www.chaochaoblog.com/archives/335
- vc添加任务栏托盘图标
- 如何在任务栏添加托盘图标
- VC++任务栏托盘图标及右键菜单实现
- VC++ 添加托盘图标和气泡
- VC实现任务栏托盘
- VC++实现任务栏托盘
- vc 托盘图标
- VC 隐藏托盘图标
- 在托盘图标中添加气球提示(VC版)
- 添加托盘图标
- VC 任务栏 系统托盘图标
- VC消灭任务栏图标
- MFC程序任务栏托盘图标的实现
- Qt任务栏,托盘栏,托盘菜单,图标等操作
- 一个优秀的VC++任务栏托盘源码
- 一个优秀的VC++任务栏托盘源码
- VC隐藏季托盘图标
- VC 获取托盘图标信息
- strcpy循环实现和不用循环实现
- 嵌入式操作系统内核原理和开发(实时系统中的定时器)
- 百度的Android招聘面试题
- iOS 上有哪些精美、优雅到艺术品水平的应用? (钓丝木有怎么办?我试试模拟器上能不能装。)
- HDU 3371 Connect the Cities
- vc添加任务栏托盘图标
- 由Java中的Set,List,Map引出的排序技巧
- C++第7周任务1-求两数正差值
- VC中利用动态链接库工程生成dll和lib文件http://blog.csdn.net/li_canhui/article/details/6775918
- 4 继承
- Silverlight 自定义Pager
- java基础
- mybatis 应该注意的地方
- 理解C#的string类型