博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC实现将对话框最小化到系统托盘
阅读量:5754 次
发布时间:2019-06-18

本文共 2181 字,大约阅读时间需要 7 分钟。

1.minisysDlg.h头文件设置:

   1)public:
   void setTray();//设置托盘
   NOTIFYICONDATA nid;//NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息
 
   2)protected:
   // Generated message map functions
   //{
{AFX_MSG(CminisysDlg)
   afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam); 
    //}}AFX_MSG
 
2.minisysDlg.cpp实现设置:
  1) #define WM_SHOWTASK (WM_USER + 1)  //设置响应消息
 
  2) BEGIN_MESSAGE_MAP(CminisysDlg, CDialog)
   //{
{AFX_MSG_MAP(CminisysDlg)
  ON_MESSAGE(WM_SHOWTASK,onShowTask)
  //}}AFX_MSG_MAP
  END_MESSAGE_MAP()
 
  3)最小化菜单响应
    void CminisysDlg::OnSysCommand(UINT nID, LPARAM lParam)
   {
         if(nID==SC_MINIMIZE)
        {
             setTray();//最小化到托盘
         }
   }
 
  4)托盘函数
   void CminisysDlg::setTray()
{
 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,"ClientTracer"); //信息提示条 
 Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标 
 ShowWindow(SW_HIDE); //隐藏主窗
}
 
5)消息函数
LRESULT CminisysDlg::onShowTask(WPARAM wParam,LPARAM lParam) 
{
 //wParam接收的是图标的ID,而lParam接收的是鼠标的行为 
 if(wParam!=IDR_MAINFRAME) return 1; 
 switch(lParam) 
 { 
  case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭” 
  { 
   LPPOINT lpoint=new tagPOINT; 
   ::GetCursorPos(lpoint);//得到鼠标位置 
   CMenu menu; 
   menu.CreatePopupMenu();//声明一个弹出式菜单 
   //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口,将程序结束。 
   menu.AppendMenu(MF_STRING,WM_DESTROY,"退出"); 
   //确定弹出式菜单的位置 
   SetForegroundWindow();//弹出菜单失去焦点后自动消失
   menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); 
   //资源回收 
   HMENU hmenu=menu.Detach(); 
   menu.DestroyMenu(); 
   delete lpoint; 
  } 
  break; 
  case WM_LBUTTONDBLCLK://双击左键的处理 
  { 
   Shell_NotifyIcon(NIM_DELETE,&nid);//删除托盘图标
   ShowWindow(SW_SHOWNORMAL);//显示主窗口
   //this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口总是在最前面
  } 
  break; 
 } 
 return 0; 
}
6)继承WM_DESTROY:
   void CminisysDlg::OnDestroy() 
{
 CDialog::OnDestroy();
 
 // TODO: Add your message handler code here
 Shell_NotifyIcon(NIM_DELETE,&nid); //退出程序后删除托盘图标
}
7) 映射ON_SIZE:
void CminisysDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType == SIZE_MINIMIZED)  
{  
ShowWindow(SW_HIDE); // 当最小化市,隐藏主窗口              
}

3.说明:代码均是添加到现有MFC框架代码!

源代码下载地址:

 

转载地址:http://zpckx.baihongyu.com/

你可能感兴趣的文章
NSTreeController初步使用(四) 展开控制
查看>>
myeclipse安装svn插件
查看>>
网络测试工具Iperf!!!附教程!!!
查看>>
ubuntu16.04开机自启动ssh自动连接screen
查看>>
IPv6地址介绍
查看>>
Boot Camp
查看>>
Skype for business 2015 综合部署系列七:配置 Skype 边缘传输服务器
查看>>
解决nginx不支持websocket
查看>>
安装及配置cinder
查看>>
如何在linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的...
查看>>
xenapp6.5中在chrome中无法打开网页
查看>>
Kubernetes入门
查看>>
企业面试 shell 入门脚本试题
查看>>
网络排错
查看>>
长时间monkey测试脚本
查看>>
三种加密算法和两种密钥交换机制讲解
查看>>
第10章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
如何部署Samba服务
查看>>
故障检测、性能调优与Java类加载机制
查看>>
CommonJS,AMD,CMD规范
查看>>