利用"NOTIFYICONDATA"实现MFC的托盘程序
本文章为转发百度空间内容,,保存一下,以防以后用到。。
一、自定义信息
在头文件中加入下面这句话:
 #define WM_SHOWTASK (WM_USER+1)
二、MYDLG.CPP文件中添加_messageEntries数组添加自定义信息WM_SHOWTASK
 ON_MESSAGE(WM_SHOWTASK,OnShowTask)//将自定义信息WM_SHOWTASK应用于OnShowTask
 放置于BEGIN_MESSAGE_MAP(MYDlg, CDialog)==END_MESSAGE_MAP()之间
三、创建缩放函数ToTray()
 void CNewMfcDlg::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); //隐藏主窗口
 }
四、创建信息处理函数OnShowTask
 //wParam接收的是图标的ID,而lParam接收的是鼠标的行为 
 LRESULT CNewMfcDlg::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();//声明一个弹出式菜单 
    //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。 
    menu.AppendMenu(MF_STRING,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;
 }
五、创建关闭程序函数DeleteTray()
 void CNewMfcDlg::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); //在托盘区删除图标 
 }
六、CNewMfcDlg::OnSysCommand函数中添加事件以触发缩放到拖盘的功能如下:
 void CNewMfcDlg::OnSysCommand(UINT nID, LPARAM lParam)
 {
  if(nID==SC_CLOSE) //SC_CLOSE:关闭程序时,SC_MINIMIZE:最小化程序时)
  {
   ToTray();
  }
else if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  {
   CAboutDlg dlgAbout;
   dlgAbout.DoModal();
  }
  else
  {
   CDialog::OnSysCommand(nID, lParam);
  }
 }
利用"NOTIFYICONDATA"实现MFC的托盘程序的更多相关文章
- MFC学习之程序执行过程梳理
		*首先利用全局变量对象theApp启动应用程序.这是由于这个全局对象,基类CWinApp中this的指针才干指向这个对象.假设没有这个全局对象,程序在编译时不会出错,但在执行时就会出错. *调用全局应 ... 
- 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发
		本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ... 
- 【转】利用MVC模式开发Java应用程序[组图]
		Java是一种面向对象的语言,是实现面向对象编程的强大工具.我们在实际编程中,应该运用并发挥其最大效能.但是,要利用面向对象编程思想,自己独立开 发出好的Java应用程序,非凡是大.中型程序,并不是一 ... 
- delphi 托盘程序 转
		Delphi的托盘编程 .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ... 
- Delphi  托盘程序实现   转
		unit MainUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ... 
- 利用XCode来进行IOS的程序开发
		利用XCode来进行IOS的程序开发 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换 ... 
- 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
		利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ... 
- [转]利用C#自带组件强壮程序日志
		利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ... 
- Qt托盘程序
		使用QSystemTrayIcon类可以实现托盘程序.在这里使用QMainWindow做实例: mainwindow.h头文件 #ifndef MAINWINDOW_H #define MAINWIN ... 
随机推荐
- entity 实体模型timeout设置
			public Entities(): base("name=Entities") { var adapter = (IObjectContextAdapter)this; var ... 
- Sublime Text插件之Emmet
			转载:http://www.w3cplus.com/tools/using-emmet-speed-front-end-web-development.html Emmet插件以前被称作为Zen Co ... 
- Google2016开发者大会
			Android主讲: 一.吴晶:android笔记博主(博客:http://www.race604.com/) 主题:Android低功耗蓝牙(BLE)实践 低功耗蓝牙在可穿戴和智能家居里边用的比较多 ... 
- cursor 与refcursor及sys_refcursor的区别 (转载)
			楼主标明是转载的,我只把我转载的地址发上来 http://www.cnblogs.com/honliv/archive/2011/07/21/2112639.html 显式是相对与隐式cursor而言 ... 
- <blockquote>标签,长文本引用
			<blockquote>的作用也是引用别人的文本.但它是对长文本的引用,如在文章中引入大段某知名作家的文字,这时需要这个标签. 等等,上一节<q>标签不是也是对文本的引用吗?不 ... 
- CSS 布局Float 【2】
			1.页面标准文档流.浮动层.float属性 1.1 文档流 HTML页面的标准文档流(默认布局)是:从上到下,从左到右,遇块(块级元素)换行. 1.2 浮动层 浮动层:给元素的float属性赋值后,就 ... 
- JavaScript中instanceof与typeof运算符的用法及区别详细解析
			JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ... 
- Activiti 工作流得到最后一次批注的时间
			我们有时候在工作流开发中可能会遇到这样的需求,就是已经审批结束的流程,可能我们还是仍然需要修改业务表的结果,而且我们需要一个时间期限,比如:在5天内可以进行修改 ,这个时候我们就需要得到我们最后一步审 ... 
- js 得到当前季度
			Date.prototype.getQuarter = function() { var month = this.getMonth(); if(month < 3) { return '第一季 ... 
- Python新手学习基础之数据结构-序列2
			长度.最大值和最小值 序列类型的数据结构,常常会用到长度检查.最大最小值检查的函数. 他们的作用: len(序列):返回列表的长度(元素个数): max(序列) :返回列表中元素最大值: min(序列 ... 
