(一)原理

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:怎么将程序窗口最小化到系统托盘相关推荐

  1. MFC中将窗口最小化到系统托盘和还原

    通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出. 1.添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的R ...

  2. C# 实现WinForm窗口最小化到系统托盘代码

    注:本程序是在VS2005基础上写的. 1.如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false; 2.如果想让程序启动时就最小化,请设置窗体的属性WindowSta ...

  3. C#实现窗口最小化到系统托盘

    关键字:C# 最小化 托盘 原文:http://www.cnblogs.com/txw1958/archive/2012/12/17/csharp-minimize-tray.html 先添加noti ...

  4. C# WinForm窗口最小化到系统托盘

    1.设置WinForm窗体属性showinTask=false  2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标.  3.添加窗体 ...

  5. MFC最小化到系统托盘

    在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICO ...

  6. 将 VMware 最小化到系统托盘

    1, 下载 Trayconizer 官网地址: http://www.whitsoftdev.com/trayconizer/ 下载地址: http://www.whitsoftdev.com/fil ...

  7. Delphi 7下最小化到系统托盘

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Del ...

  8. C#实现winform软件开机自动启动并最小化到系统托盘

    一.开机自动启动: 拖一个CheckBox 1.软件启动时给CheckBox重置状态: RegistryKey R_local = Registry.LocalMachine;             ...

  9. SysTrayIcon 改的 python tkinter 最小化至系统托盘

    网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面 1.点击最小化隐藏至托盘 2.托盘图标右键菜单展示,左键返回Tk界面. 托盘图标可以自定义,修改了SysTrayI ...

最新文章

  1. DPDK — TestPMD
  2. ACM POJ 2723 Get Luffy Out(2-SAT入门)
  3. 听说GNN大有可为,从这篇开始学以致用
  4. PHP mail()可能导致的问题
  5. 我如何向团队解释依赖注入
  6. 连接linux桌面命令,连接Linux远程桌面的四个方法
  7. Postman入门到精通01
  8. DreamFactory入门指南 - 第2章安装和配置DreamFactory
  9. 如何避免可怕的中年危机?看完这篇彻底明白了
  10. JVM监控及诊断工具命令行篇之jcmd
  11. VS2013 Codejock 实现 MFC 换肤
  12. 破解版的ABBYY FineReader OCR文字识别软件,真的好用吗?
  13. C/C++,pascal函数调用约定
  14. solidworks电气元件3d库_60套机械设计三维选型软件 非标自动化 电气选型SolidWorks标准件...
  15. Word 打印 PrintOut 方法
  16. NYOJ-234-DP(吃土豆)
  17. 通过js获取谷歌浏览器版本
  18. 统计学基础——常用的概率分布(二项分布、泊松分布、指数分布、正态分布)
  19. String#intern
  20. java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中

热门文章

  1. 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
  2. 2021年春季学期-信号与系统-第九次作业参考答案-第二小题
  3. 测量ATMEGA8单片机IO口的输入输出内阻
  4. 点击空白处遮罩层关闭_如何手动关闭win10系统自带的windows defender
  5. id jquery 拼接_jquery拼接ajax的json和字符串的方法
  6. 为什么mysql打开闪屏_mysql登录闪屏问题解决办法
  7. 插入排序c语言_玩扑克牌中插扑克牌手法就是不一样,C语言经典算法之插入排序...
  8. linux+分配挂载点权限,Linux系统管理(一)——初学者建议
  9. 我的人生项目 -- 启动
  10. C union的使用条件