MFC程序最小化到托盘

转载 2016年03月21日 17:14:53

网上搜的代码确实能实现最小化到托盘,但关闭程序时,托盘图标还在,原因是没删除图标,需屏幕刷屏才消失!

其实删除挺简单的,处理一下关闭窗口消息,使用NIM_DELETE就行了,具体看代码...

首先建立基于对话框的MFC应用程序工程testDlg,接下来

一,自定义一个消息WM_SHOWTASK,并关联消息映射函数OnShowTask()

// 定义消息  
#define WM_SHOWTASK (WM_USER + 1)  
   
// 关联消息映射函数  
// 位于BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间  
    ON_MESSAGE(WM_SHOWTASK,OnShowTask)  
   
// 当然要声明和定义OnShowTask()  
// 声明  
    LRESULT OnShowTask(WPARAM wParam, LPARAM lParam) ; 
<pre name="code" class="cpp">LRESULT CtestdlgDlg::OnShowTask(WPARAM wParam, LPARAM lParam)   
//wParam接收的是图标的ID,lParam接收的是鼠标的动作  
{   
	if(wParam != IDR_MAINFRAME)   
		return 1;
	switch(lParam)
	{
	case WM_LBUTTONDOWN:
		this->ShowWindow(SW_SHOW); // 显示主窗口  WM_LBUTTONDBLCLK
		break;
	case WM_RBUTTONUP:               //右键起来时弹出菜单
		{
			LPPOINT lpoint = new tagPOINT;
			::GetCursorPos(lpoint);                    // 得到鼠标位置

			CMenu menu;
			menu.CreatePopupMenu();                    // 声明一个弹出式菜单
			menu.AppendMenu(MF_STRING, WM_DESTROY, "退出");//Appends a new item to the end ofthis menu
			//Displays a floating pop-up menu at the specifiedlocation and tracks the selection of items on the pop-up menu
			menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y,this);
			HMENU hmenu = menu.Detach();
			menu.DestroyMenu();
			delete lpoint;
			break;
		}
	}
	return 0;   
}



二,SC_MINIMIZE、SC_CLOSE消息处理,重载WM_SYSCOMMAND消息处理

void CtestDlgDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if(nID == SC_MINIMIZE) // 最小化窗口
	{
		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_s(nid.szTip, "程序窗口标题");        // 信息提示条
		Shell_NotifyIcon(NIM_ADD, &nid);            // 在托盘区添加图标 
		ShowWindow(SW_HIDE);                        // 隐藏主窗口 
		return;
	}
	elseif(nID == SC_CLOSE) // 关闭窗口
	{
		NOTIFYICONDATA nd;
		nd.cbSize    = sizeof (NOTIFYICONDATA);
		nd.hWnd    = this->m_hWnd;
		nd.uID   =   IDR_MAINFRAME;
		Shell_NotifyIcon(NIM_DELETE, &nd);    // 托盘图标不显示
	}
	CDialog::OnSysCommand(nID, lParam);
}


原文:http://blog.csdn.net/lightboat09/article/details/6069792

MFC 程序最小化到系统托盘区的一个简单实例

准备工作:      在开始之前,我们需要弄清出一下东东,当然,你也可以知其然而不知其所以然,会用就好。          1. MFC 自定义消息的过程(详见后文)          2. BOOL...
  • JarvisChu
  • JarvisChu
  • 2010年08月01日 19:19
  • 6313

MFC 关闭窗口最小化到托盘,并产生气泡消息提醒

关闭窗口最小化到托盘关于怎么实现托盘程序以及托盘菜单可以参考MFC下托盘图标的实现和托盘菜单 实现关闭窗口达到最小化的效果,网上说有用onsystem方法,其实用重载oncancel方法就可以实现...
  • leizicoder
  • leizicoder
  • 2015年09月01日 15:51
  • 1236

[C#]WinFrom中实现最小化至系统托盘

刚在写个程序,遇到个小问题,就是当点击最小化按钮时,如何把程序最小化到系统托盘里去。其实这样的例子在很多软件上面都可以见到的,但刚开始找属性时并没有任何和系统托盘有关的,找了一下事件,也没有发现有关最...
  • mengyao
  • mengyao
  • 2006年11月09日 23:51
  • 2168

node-webkit项目最小化到托盘(右下角)

var isShowWindow = true; var gui = require('nw.gui'); var win = gui.Window.get(); ...
  • h5css3_linhuai
  • h5css3_linhuai
  • 2017年02月20日 18:13
  • 856

MFC 最小化到托盘及右击托盘菜单

//全局变量 NOTIFYICONDATA nid;//托盘图标全局变量//在stdafx.h #define WM_SHOWTASK (WM_USER + 123) // 关联消息映射函数 // 位...
  • salony
  • salony
  • 2016年01月21日 22:30
  • 1782

Qt开发:最小化到托盘

其实qt的帮助文档里面有个例子,另外很多api在QSystemTrayIcon类里面。 首先建立Qt的gui工程,本文默认都带了ui文件,如果不带ui文件,需要在程序里手动代码写ui,所有代码都未修...
  • u012234115
  • u012234115
  • 2015年02月12日 18:10
  • 1468

wpf 最小化托盘

NotifyIcon 类 指定可在通知区域创建图标的组件。 此类不能被继承。 private NotifyIcon _notifyIcon = null; private void In...
  • i1tws
  • i1tws
  • 2017年03月02日 17:17
  • 216

程序最小化到托盘

转自:http://zf0026.blog.163.com/blog/static/178262113201121711302641/ 对原文的补充,最为新手,需要知道如何定义消息,响应WM_SIZ...
  • u011365452
  • u011365452
  • 2013年09月05日 17:34
  • 1649

java Swing 实现将系统最小化到系统托盘

源码:/*  * MainFrame.java  *  * Created on 2008年9月20日, 上午11:44  */    package com.topking.tray.ui;    ...
  • shangzhiliang_2008
  • shangzhiliang_2008
  • 2010年01月14日 14:01
  • 3943

MFC将窗口最小化到托盘

1、在头文件中自定义消息:#define  WM_SHOWTASK  WM_USER+1以及声明消息响应函数:   afx_msg LRESULT onShowTask(WPARAM wParam, ...
  • liuyi1207164339
  • liuyi1207164339
  • 2015年07月29日 21:21
  • 984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC程序最小化到托盘
举报原因:
原因补充:

(最多只允许输入30个字)