MFC:怎么将程序窗口最小化到系统托盘
(一)原理
1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标。
2、恢复的原理:将窗口显示,再将托盘中的图片删除。
(二)程序实现
1、自定义消息WM_SHOWTASK:
#define WM_SHOWTASK (WM_USER +1)
2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam) 函数体中增加一个命令响应
if(nID==SC_MINIMIZE)
ToTray(); //最小化到托盘的函数
3、在消息映射中添加
ON_MESSAGE(WM_SHOWTASK,OnShowTask); //其中WM_SHOWTASK是消息名,
OnShowTask是自己定义的消息响应函数,后面有说明。
(三)具体函数内容
1、最小化到托盘函数
void CMyDlg::ToTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,”程序名称”); //信息提示条
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口
}
2、恢复界面函数
在头文件中定义消息响应函数
afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
menu.AppendMenu(MF_STRING,WM_DESTROY,”关闭”); //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单的位置
HMENU hmenu=menu.Detach();
menu.DestroyMenu(); //资源回收
delete lpoint;
} break;
case WM_LBUTTONDBLCLK: //双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
DeleteTray();
} break;
default: break;
}
return 0;
}
3、删除托盘图标函数
void CMyDlg::DeleteTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK; //自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,”程序名称”); //信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
}
请关注 李木空间 www.limou.net 更多MFC知识。
转载于:https://www.cnblogs.com/naxiesuowei/archive/2011/12/13/2285746.html
MFC:怎么将程序窗口最小化到系统托盘相关推荐
- MFC中将窗口最小化到系统托盘和还原
通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出. 1.添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的R ...
- C# 实现WinForm窗口最小化到系统托盘代码
注:本程序是在VS2005基础上写的. 1.如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false; 2.如果想让程序启动时就最小化,请设置窗体的属性WindowSta ...
- C#实现窗口最小化到系统托盘
关键字:C# 最小化 托盘 原文:http://www.cnblogs.com/txw1958/archive/2012/12/17/csharp-minimize-tray.html 先添加noti ...
- C# WinForm窗口最小化到系统托盘
1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体 ...
- MFC最小化到系统托盘
在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICO ...
- 将 VMware 最小化到系统托盘
1, 下载 Trayconizer 官网地址: http://www.whitsoftdev.com/trayconizer/ 下载地址: http://www.whitsoftdev.com/fil ...
- Delphi 7下最小化到系统托盘
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Del ...
- C#实现winform软件开机自动启动并最小化到系统托盘
一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine; ...
- SysTrayIcon 改的 python tkinter 最小化至系统托盘
网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面 1.点击最小化隐藏至托盘 2.托盘图标右键菜单展示,左键返回Tk界面. 托盘图标可以自定义,修改了SysTrayI ...
最新文章
- DPDK — TestPMD
- ACM POJ 2723 Get Luffy Out(2-SAT入门)
- 听说GNN大有可为,从这篇开始学以致用
- PHP mail()可能导致的问题
- 我如何向团队解释依赖注入
- 连接linux桌面命令,连接Linux远程桌面的四个方法
- Postman入门到精通01
- DreamFactory入门指南 - 第2章安装和配置DreamFactory
- 如何避免可怕的中年危机?看完这篇彻底明白了
- JVM监控及诊断工具命令行篇之jcmd
- VS2013 Codejock 实现 MFC 换肤
- 破解版的ABBYY FineReader OCR文字识别软件,真的好用吗?
- C/C++,pascal函数调用约定
- solidworks电气元件3d库_60套机械设计三维选型软件 非标自动化 电气选型SolidWorks标准件...
- Word 打印 PrintOut 方法
- NYOJ-234-DP(吃土豆)
- 通过js获取谷歌浏览器版本
- 统计学基础——常用的概率分布(二项分布、泊松分布、指数分布、正态分布)
- String#intern
- java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中
热门文章
- 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
- 2021年春季学期-信号与系统-第九次作业参考答案-第二小题
- 测量ATMEGA8单片机IO口的输入输出内阻
- 点击空白处遮罩层关闭_如何手动关闭win10系统自带的windows defender
- id jquery 拼接_jquery拼接ajax的json和字符串的方法
- 为什么mysql打开闪屏_mysql登录闪屏问题解决办法
- 插入排序c语言_玩扑克牌中插扑克牌手法就是不一样,C语言经典算法之插入排序...
- linux+分配挂载点权限,Linux系统管理(一)——初学者建议
- 我的人生项目 -- 启动
- C union的使用条件