首页 > 其他分享 >托盘功能实现三步曲

托盘功能实现三步曲

时间:2023-06-15 18:12:43浏览次数:33  
标签:功能 CMainFrame pos break 托盘 hIcon cs 三步 tnid

1. 隐藏窗体

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

         if( !CFrameWnd::PreCreateWindow(cs) )

                  return FALSE;

         cs.style = WS_POPUP;//使主窗口不可见

         cs.dwExStyle = WS_EX_TOOLWINDOW;//不显示任务按钮

         cs.lpszClass = AfxRegisterWndClass(0);

         return TRUE;

}

2. 增加托盘

CMainFrame类中增加变量

         NOTIFYICONDATA m_tnid; 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数返回前增加如下代码

m_tnid.cbSize = sizeof(NOTIFYICONDATA);  

         m_tnid.hWnd = this->m_hWnd;  

         m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;  

         m_tnid.uCallbackMessage = MYWM_NOTIFYICON;     

         CString szToolTip = _T("故¨º障?辅¡§助¨²");

         _tcscpy(m_tnid.szTip, szToolTip);  

         m_tnid.uID = IDR_MAINFRAME;  

         HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);  

         m_tnid.hIcon = hIcon;  

         ::Shell_NotifyIcon(NIM_ADD, &m_tnid);  

         if(hIcon)

         {

                  ::DestroyIcon(hIcon);

         }

3. 消息处理

LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)     

{

         switch(message)

         {

         case MYWM_NOTIFYICON:

                  if(lParam == WM_LBUTTONDBLCLK)  

                  {  

                          AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);  

                  } 

                  else if(lParam == WM_RBUTTONDOWN)

                  {     

                          CMenu menu;

                          menu.LoadMenu(IDR_MAINFRAME);     

                          CMenu* pMenu=menu.GetSubMenu(0);  

                          CPoint pos;  

                          GetCursorPos(&pos);  

                           pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());  

                  }

                  break;  

         case WM_SYSCOMMAND:

                  switch(wParam)

                  { 

                  case SC_MINIMIZE:                           

                          ShowWindow(SW_HIDE);  

                          break; 

                  case SC_CLOSE : 

                          ::Shell_NotifyIcon(NIM_DELETE, &m_tnid);  

                          break; 

                  }  

                  break;  

         }

         return CFrameWnd::WindowProc(message, wParam, lParam); 

}

标签:功能,CMainFrame,pos,break,托盘,hIcon,cs,三步,tnid
From: https://www.cnblogs.com/xiaoxiaoshi/p/17483699.html

相关文章

  • Vue简单的分页功能实现一
    Vue简单的分页功能实现一前端的分页功能其实是对数据的分页处理,主要是在js中实现对数据的分页处理,这里分享两种简单的写法,以供参考。两种方法都是用vue来实现的。首先,相关的参数都一样,在vue里的data中定义好,如下所示:varvm=newVue({el:'#app',data:{list......
  • vue简单的分页功能实现二
    vue简单的分页功能实现二第二种使用vue实现分页功能的方法。首先,data数据定义:varvm=newVue({el:'#app',data:{listArray:[{'name':'赵*','age':'21','edu......
  • Java低代码开发工具:jvs-rules 2.1.8 新版本功能清单
    规则引擎用于管理和执行业务规则。它提供了一个中央化的机制来定义、管理和执行业务规则,以便根据特定条件自动化决策和行为。规则引擎的核心概念是规则。规则由条件和动作组成。条件定义了规则适用的特定情况或规则触发的条件,而动作定义了规则满足时要执行的操作或行为。jvs-rules......
  • vue-router实现SPA购物APP基本功能
    概述vue-router是vue中的一个核心插件,用它来实现SPA购物APP基本功能详细vue-router是vue中的一个核心插件。一、安装1.如果安装脚手架,那么可以npminstallvue-router即可安装然后导入并且引用就可以了。importVueRouterfrom'vue-router'Vue.use(VueRouter)......
  • AdPlayBanner:功能丰富、一键式使用的图片轮播插件
    概述AdPlayBanner:功能丰富、一键式使用的图片轮播插件详细AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresco、Picasso、Glide等图片加载方式供用户使用,以及多种图片切换动画,设置轮播时间,设置数据源顺序,提......
  • 租赁小程序开发|人车网租赁系统搭建|租赁电商小程序开发功能
    当人们想要出租物品的时候往往是通过互联网平台来实现的,以前都是通过分类信息网站,但是线下中介很多,差别也很大,大多数人都不知道怎么选择。为了给人们租赁物品提供方便,有必要开发一个租赁小程序。那么在开发租赁小程序的时候要设计哪些功能呢?接下来小编就给大家介绍下。人车网租赁软......
  • ajax + java 实现类似网易邮箱邮件地址自动完成功能
    ajax+java实现类似网易邮箱邮件地址自动完成功能2008-04-0218:30********************************************************************源代码下载链接:http://www.javaeye.com/topic/150778***************************************************************......
  • 重拾梦想!语音交友源码平台搭建技术知识:在线K歌功能的实现
    你是否小时候也有一个当歌手的梦想,长大后却因生活压力所迫而放弃?我相信绝大多数人小的时候都有一个当歌手的梦想,因为在我们小的时候非常的天真纯洁,当听到好听的歌或是想起好听的歌,不管在何时何地,公共场合或是私密场所我们都可以不惧别人的目光唱起来歌,不管我们唱的好不好听,大部分人......
  • oracle中if/else功能的实现的3种写法
    一、单个IF1、ifa=...then.........endif;2、ifa=...then......else....endif;二、多个IFifa=..then......elsifa=..then....endif;这里中间是“ELSIF”,而不是ELSEIF。这里需要特别注意https://www.cnblogs.com/yangzhilong/archi......
  • c#用表达式树实现深拷贝功能
    因为对表达式树有点兴趣,出于练手的目的,试着写了一个深拷贝的工具库。支持.netstandard2.0或.netframework4.5及以上。GitHub地址https://github.com/blurhkh/DeepCopiernuget地址https://www.nuget.org/packages/DeepCopier使用方法如下:首先创建几个测试用的类型pub......