MFC中将窗口最小化到系统托盘和还原
通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出。
1、添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的Resource View(资源视图)中添加,该图标主要用于在托盘区显示;在头文件中定义添加托盘图标的消息号(用户所有对托盘的消息将对应此消息号):
#define WM_ICON_NOTIFY WM_USER +1
2、新添加一个函数_ToTray(void),让其添加一个托盘图标:
void CAirMove_mainDlg::_ToTray(void)
{
m_NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
m_NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDI_ICON_TESTICON);
m_NotifyIcon.hWnd=m_hWnd;
m_NotifyIcon.uID = IDI_ICON_AIRMOVE;
lstrcpy(m_NotifyIcon.szTip,_T("Test"));
m_NotifyIcon.uCallbackMessage=WM_ICON_NOTIFY;
m_NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon);
m_IsWindowHide = true;
}
说明:
(1)需注意其中的消息号WM_ICON_NOTIFY是托盘区的响应消息,即用户对托盘图标的所有操作都会发送到此消息对应的响应函数中
(2)成员变量m_IsWindowHide 用于标识窗口是否已经最小化到系统托盘,该变量初始化为true
(3)向托盘区发送的消息号为WM_ICON_NOTIFY,
2、在窗口初始化函数OnInitDialog()中调用步骤2中添加的函数_ToTray
// TODO: Add extra initialization here
_ToTray();
3、添加消息WM_ICON_NOTIFY的响应函数_OnIconNotify:
(1)在头文件中添加响应函数_OnIconNotify的声明:
afx_msg LRESULT _OnIconNotify(WPARAM wParam,LPARAM lParam);
(2)在cpp文件中的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息与函数的映射宏:
ON_MESSAGE(WM_ICON_NOTIFY,_OnIconNotify)
(3)在cpp文件中实现消息响应函数_OnIconNotify:
LRESULT CAirMove_mainDlg::_OnIconNotify(WPARAM wParam,LPARAM lParam)
{
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT)lParam;
switch (uMouseMsg)
{
case WM_RBUTTONDOWN:
{
CMenu popMenu;
popMenu.CreatePopupMenu();
popMenu.AppendMenu(MF_STRING, WM_DESTROY, _T("exit"));
popMenu.AppendMenu(MF_STRING, WM_START_DEBUGER, _T("启动 Debuger窗口")); popMenu.AppendMenu(MF_STRING, WM_HIDE_WORKING_WINDOW, _T("隐藏锁定窗口")); popMenu.AppendMenu(MF_STRING, WM_DISPLAY_WORKING_WINDOW, _T("打开锁定窗口"));
POINT ptMouse;
::GetCursorPos(&ptMouse);
::SetForegroundWindow(m_NotifyIcon.hWnd);
::TrackPopupMenu(popMenu.m_hMenu, 0, ptMouse.x, ptMouse.y, 0, m_NotifyIcon.hWnd, NULL);
break;
}
case WM_LBUTTONDBLCLK:
{
_OnStartDebuger(0,0);
break;
}
}
return 0;
}
说明:
(1)上述消息响应函数的实现只是个例子,在开发过程中可以根据自己的需要添加特定的功能。
(2)上述的消息响应函数中只实现了对托盘的鼠标左键双击和右键的响应。其中右键响应消息中实现一个弹出式菜单;左键双击弹出一个对话框
(3)用户对托盘的所有消息都会发送到消息响应函数_OnIconNotify中。
(4)在头文件中添加WM_HIDE_WORKING_WINDOW、WM_START_DEBUGER等消息号的定义,例如:
#define WM_HIDE_WORKING_WINDOW WM_USER +4
4、在窗口的OnWindowPosChanging函数中添加如下代码:
void CTestDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
if(m_IsWindowHide)
lpwndpos->flags &= ~SWP_SHOWWINDOW;
CDialog::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
}
5、为托盘的右键弹出的菜单项添加响应函数,以“隐藏锁定窗口”菜单项(对应消息号为WM_HIDE_WORKING_WINDOW)为例
(1)在头文件中添加消息响应函数的声明:
afx_msg void OnHideWorkingMenu();
(2)在cpp文件中的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息与函数的映射宏:
ON_COMMAND(WM_HIDE_WORKING_WINDOW,OnHideWorkingMenu)
(3)在cpp文件中添加函数的实现,代码略。
MFC中将窗口最小化到系统托盘和还原相关推荐
- MFC:怎么将程序窗口最小化到系统托盘
(一)原理 1.最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标. 2.恢复的原理:将窗口显示,再将托盘中的图片删除. (二)程序实现 1.自定义消息WM_SHOWTASK: #define WM ...
- C#实现窗口最小化到系统托盘
关键字:C# 最小化 托盘 原文:http://www.cnblogs.com/txw1958/archive/2012/12/17/csharp-minimize-tray.html 先添加noti ...
- C# 实现WinForm窗口最小化到系统托盘代码
注:本程序是在VS2005基础上写的. 1.如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false; 2.如果想让程序启动时就最小化,请设置窗体的属性WindowSta ...
- 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 ...
最新文章
- android时间显示中文版,系统运行时间显示工具(Vov System Uptime)
- hdu 4289(最小割最大流定理)
- Java客户端操作elasticsearch--查询索引库(高亮显示)
- sqlite3 c语言编程,SQLite教程(十三):C语言编程实例代码(1)
- Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
- AI领域都在用Python即将被淘汰?网友预测未来的编程语言不会是TA
- 支撑1300+矿井监控,华为云数据库助力打造智能矿山
- popstate_详解HTML5之pushstate、popstate操作history,无刷新改变当前url
- keras embedding层_初识TextCNN及keras实现
- codeforces round #257 div2 C、D
- 超分20220218讨论
- C语言中将数字形式的字符串转换为数字的方法
- 三种计算机控制系统是,计算机控制系统3
- php中符号大全,PHP 符号大全
- bzoj4391 [Usaco2015 dec]High Card Low Card题解
- 公式编辑器中如何修改字体?
- 勇敢做自己,女神节快乐!
- 3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(1)marlin 2.0.9.2 截至发稿时间2021年12月16日
- STM8S的ADC配置
- 我的学厨记——香煎鸡翅
热门文章
- yum安装elasticsearch慢_ELK elasticsearch yum 安装(4th)
- 如何在参考文献中优雅地引用URL?How do you get nicely formatted URLs in the bibliography?
- thinkphp v5.0.11漏洞_thinkphp 5.0 代码执行漏洞
- 使用嵌套循环,打印四行五列星星矩形(每次只能打印一个*)
- html登陆l判断,html作业登陆界面
- android 开启线程关闭对话框,java – 从后台线程的PopUp对话框Android
- 5_数据分析—数据可视化
- 口红会染唇是什么意思_别只知道露华浓了!这些平价口红,我吹爆!
- python tkinter画笑脸_python – 如何在tkinter窗口中绘制图像
- matlab soble滤波,MATLAB 图像滤波去噪分析及其应用