本文章为转发百度空间内容,,保存一下,以防以后用到。。

一、自定义信息

在头文件中加入下面这句话:
#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的托盘程序的更多相关文章

  1. MFC学习之程序执行过程梳理

    *首先利用全局变量对象theApp启动应用程序.这是由于这个全局对象,基类CWinApp中this的指针才干指向这个对象.假设没有这个全局对象,程序在编译时不会出错,但在执行时就会出错. *调用全局应 ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ...

  3. 【转】利用MVC模式开发Java应用程序[组图]

    Java是一种面向对象的语言,是实现面向对象编程的强大工具.我们在实际编程中,应该运用并发挥其最大效能.但是,要利用面向对象编程思想,自己独立开 发出好的Java应用程序,非凡是大.中型程序,并不是一 ...

  4. delphi 托盘程序 转

    Delphi的托盘编程   .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  5. Delphi 托盘程序实现 转

    unit MainUnit; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ...

  6. 利用XCode来进行IOS的程序开发

    利用XCode来进行IOS的程序开发 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换 ...

  7. 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定

    利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...

  8. [转]利用C#自带组件强壮程序日志

    利用C#自带组件强壮程序日志   在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...

  9. Qt托盘程序

    使用QSystemTrayIcon类可以实现托盘程序.在这里使用QMainWindow做实例: mainwindow.h头文件 #ifndef MAINWINDOW_H #define MAINWIN ...

随机推荐

  1. python学习之成员信息增删改查

    主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env python# coding=utf8# ...

  2. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  3. 洛谷P1993 小 K 的农场(查分约束)

    /* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ ...

  4. Spring.Net+NHibernate+asp.net mvc + easyui

    毕业4个月的入手项目..前段时间在公司一直做的维护..为了弄明白自己也就跟着写了一个,目前也正在学习:不对的或者是有更好的还请各位赐教. 在学习的过程中主要参考::http://www.cnblogs ...

  5. HighCharts常用设置(摘抄笔录)

  6. Jquery小东西收集

    1. $(document).ready(),$(function(){}),$(window).load(),window.onload的关系与区别 $(document).ready(functi ...

  7. 依赖注入与Unity(一) 介绍

        在你学习依赖注入和Unity之前,你需要明白你为什么要使用它们.为了明白为什么要使用它们,你应该明白依赖注入和Unity能够帮助你解决什么类型的问题.作为介绍部分,这一章不会涉及太多关于Uni ...

  8. 七、C# 接口

    并非只能通过继承使用多态性,还能通过接口使用它. 和抽象类不同,接口不包含任何实现(方法). 然后和抽象类相似,接口也定义了一系列成员,调用者可以依赖这些成员来支持一个特定的功能.   实现接口的类会 ...

  9. dede密码忘记 的修改方法

    DEDE是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 进入数据库  找到数据表dede_admin 我们只要把pwd对应的md5加密码修改为c3949ba59abbe56e0 ...

  10. Delphi Keycode

    Keycode表 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L ...