MFC程序最小化到托盘
来源:互联网 发布:进口美工刀架9mm品牌 编辑:程序博客网 时间:2024/04/29 00:44
1.新建一个基于对话框的程序
2.在StdAfx.h增加自定义的消息:
#define WM_USER_NOTIFYICON WM_USER+1
3.增加一个私有成员变量:
private: NOTIFYICONDATA m_notify;
4.在OnInitDialog()中添加下面代码:
m_notify.cbSize=sizeof NOTIFYICONDATA;m_notify.hWnd=this->m_hWnd;m_notify.uID=IDR_MAINFRAME;m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));strcpy(m_notify.szTip,"最小化图标指向时的提示字符!");m_notify.uCallbackMessage = WM_USER_NOTIFYICON;m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; //OK,下面就是托盘产生了. Shell_NotifyIcon(NIM_ADD,&m_notify);
5. 在**Dlg.h文件的protected中定义消息的那些代码中增加:
afx_msg LRESULT OnNotifyMsg(WPARAM wparam,LPARAM lparam);
6.在**Dlg.cpp中找到下面部分代码,添加:ON_MESSAGE(WM_USER_NOTIFYICON,OnNotifyMsg),如下:
BEGIN_MESSAGE_MAP(CNotifyiconDlg, CDialog)//{{AFX_MSG_MAP(CNotifyiconDlg) ...//添加下面一句代码:ON_MESSAGE(WM_USER_NOTIFYICON,OnNotifyMsg)//}}AFX_MSG_MAPEND_MESSAGE_MAP()
7.在**Dlg.cpp中添加消息响应函数(注意:我建的工程名为:1,所以是CMy1Dlg,具体根据自己的情况更改):
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为LRESULT CMy1Dlg::OnNotifyMsg(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://双击左键的处理 {/**********************这段代码不太管用********************************//鼠标双击时主窗口出现 if(AfxGetApp()->m_pMainWnd->IsWindowVisible()) //判断窗口当前状态{AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); //隐藏窗口}if(!AfxGetApp()->m_pMainWnd->IsWindowVisible()) //判断窗口当前状态{AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW); //显示窗口}**************************************************************/this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 } break; } return 0;}
8.添加WindowProc(UINT message, WPARAM wParam, LPARAM lParam)消息响应函数,以处理其他一些消息。注意该函数里不要在添加case WM_USER_NOTIFYICON,因为这些已经通过OnNotifyMsg(WPARAM wparam,LPARAM lparam)响应。(注意:我建的工程名为:1,所以是CMy1Dlg,具体根据自己的情况更改)
LRESULT CMy1Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {// TODO: Add your specialized code here and/or call the base classswitch(message) //判断消息类型{//相应右键菜单的关闭命令case WM_DESTROY: ::Shell_NotifyIcon(NIM_DELETE,&m_notify); //关闭时删除系统托盘图标break;case WM_SYSCOMMAND: //如果是系统消息 if(wParam==SC_MINIMIZE) { //接收到最小化消息时主窗口隐藏 AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); return 0; } if(wParam==SC_CLOSE) { ::Shell_NotifyIcon(NIM_DELETE,&m_notify); //关闭时删除系统托盘图标 } break;}return CDialog::WindowProc(message, wParam, lParam);}
Over!
源代码下载:
http://download.csdn.net/detail/c_s_d_n_user/5307245
- MFC程序最小化到托盘
- MFC最小化程序到托盘
- MFC最小化程序到托盘
- MFC程序最小化到托盘
- MFC程序最小化到托盘
- MFC程序最小化到托盘
- MFC 程序最小化到任务栏托盘
- MFC程序启动时最小化到托盘
- MFC最小化到托盘
- MFC最小化到托盘
- MFC最小化到托盘
- 程序最小化到托盘
- 程序最小化到托盘
- MFC对话框最小化到托盘
- MFC对话框最小化到托盘
- MFC实现最小化到托盘
- MFC对话框最小化到托盘
- MFC窗口最小化到托盘
- 判断点在直线上
- 按光在光纤中的传输模式可将光纤分为单模光纤和多模光纤两种
- Autoconf &Automake 自动生成Makefile
- 准备EMC之 RAM ROM FLASH区别
- Linux下epoll原理及封装
- MFC程序最小化到托盘
- 把字符串转换成整数
- Part3:细节 知识点
- java中的static
- hdu 2964 (数论)
- 生物医学工程领域 生物医学图像处理 SCI期刊
- Starling测试--发布
- infobright安装与配置
- 初学存储-关于IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍