博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vc学习之关于缩放到托盘区
阅读量:4072 次
发布时间:2019-05-25

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

昨天为了这个缩放调了很长时间,非常郁闷的发现最终导致为题的只是没有映射消息,现在我把最终代码的实现贴出来看看

1、增加自定义消息、图标

#define WM_NOTIFYICON WM_USER+5
#define IDI_ICON  0x0005

2、增加响应函数

 在DECLARE_MESSAGE_MAP()前面增加
 afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);

3、增加消息映射

 ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)

4、增加消息映射函数体

void CGateWayMonitorDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
 if (wParam == IDI_ICON )
 {
  //响应不同的消息
  switch(lParam)
  {
  case WM_LBUTTONDOWN:
   ShowWindow(SW_SHOWNORMAL);
   this->SetActiveWindow();
   IconRemoveFromTray();
   break;
  case WM_RBUTTONDOWN:
   //弹出右键菜单
   //PopupRightMenu(IDR_MENU);
   CMenu menu;
   CPoint pos;
   menu.LoadMenu(IDR_MENU_TRAY_POP); //菜单
   //载入事先定义的菜单
   CMenu* pMenu=menu.GetSubMenu(0);

   GetCursorPos(&pos);

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

5、增加托盘区变量

 NOTIFYICONDATA m_nd;//便于删除

6、增加函数

BOOL CGateWayMonitorDlg::IconAddToTray(CString strTitle)
{
 BOOL bReturn;

 bReturn = FALSE;

 // 将图标放入系统托盘

 m_nd.cbSize = sizeof (NOTIFYICONDATA);
 m_nd.hWnd = m_hWnd;
 m_nd.uID = IDI_ICON;
 m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
 m_nd.uCallbackMessage= WM_NOTIFYICON;
 m_nd.hIcon = m_hIcon;

 if (strTitle == "") strTitle = "网关监视进程";

 strcpy(m_nd.szTip, strTitle);

 
 bReturn = Shell_NotifyIcon(NIM_ADD, &m_nd);

 if (bReturn == TRUE)

 {
  ShowWindow(SW_HIDE);
 }
 else
 {
  AfxMessageBox("将窗口缩放到托盘区失败!失败原因:未知");
 }
 
 return bReturn;
}

7、增加加入到托盘区函数

BOOL CGateWayMonitorDlg::IconAddToTray(CString strTitle)
{
 BOOL bReturn;

 bReturn = FALSE;

 // 将图标放入系统托盘

 m_nd.cbSize = sizeof (NOTIFYICONDATA);
 m_nd.hWnd = m_hWnd;
 m_nd.uID = IDI_ICON;
 m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
 m_nd.uCallbackMessage= WM_NOTIFYICON;
 m_nd.hIcon = m_hIcon;

 if (strTitle == "") strTitle = "网关监视进程";

 strcpy(m_nd.szTip, strTitle);

 
 bReturn = Shell_NotifyIcon(NIM_ADD, &m_nd);

 if (bReturn == TRUE)

 {
  ShowWindow(SW_HIDE);
 }
 else
 {
  AfxMessageBox("将窗口缩放到托盘区失败!失败原因:未知");
 }
 
 return bReturn;
}

8、增加删除托盘区图标函数

BOOL CGateWayMonitorDlg::IconRemoveFromTray()
{
 //将图标从托盘区删除
 BOOL bReturn;

 bReturn = Shell_NotifyIcon(NIM_DELETE, &m_nd);

 return bReturn;
}

9、在需要调用的地方 写入

 IconAddToTray("");

10、大功告成

有一个优点,可以及时地删除托盘区的图标,不会造成延时

 

 

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

你可能感兴趣的文章
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>