MFC添加图标到托盘

MFC窗口实现最小化到托盘 右键菜单和还原

//.h文件
void toTray();//最小化到托盘
void DeleteTray();//删除托盘图标

afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//图标恢复

//.cpp文件

define WM_SHOWTASK (WM_USER +1)

define IDR_SHOW 11

define IDR_OTHER 12

define IDR_EXIT 13

BEGIN_MESSAGE_MAP()
...
ON_MESSAGE(WM_SHOWTASK,OnShowTask)//消息映射
END_MESSAGE_MAP()

void ScheduleDlg::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,"OA");//信息提示条为“OA”?
??? Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标?
??? ShowWindow(SW_HIDE);//隐藏主窗口
}

LRESULT ScheduleDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
??? if(wParam != IDR_MAINFRAME) return 1;
??? switch (lParam)
??? {
??? case WM_LBUTTONUP://左键单击显示主界面
??????? {
??????????? this->ShowWindow(SW_SHOW);
??????????? SetForegroundWindow();
??????????? DeleteTray();
??????? }break;
??? case WM_RBUTTONUP://右击弹出菜单
??????? {
??????????? LPPOINT lpoint = new tagPOINT;
??????????? ::GetCursorPos(lpoint);//得到鼠标位置
??????????? CMenu menu;
??????????? menu.CreatePopupMenu();
??????????? menu.AppendMenu(MFT_STRING, IDR_SHOW, "打开主界面");
??????????? menu.AppendMenu(MFT_STRING, IDR_OTHER, "其他");
??????????? menu.AppendMenu(MFT_STRING, IDR_EXIT, "退出");
??????????? SetForegroundWindow();
??????????? EnableMenuItem(menu,IDR_OTHER,MF_GRAYED);//"其他"菜单变灰
??????????? //menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x,lpoint->y,this);//显示菜单
??????????? int xx=TrackPopupMenu(menu,TPM_RETURNCMD,lpoint->x,lpoint->y,NULL,this->m_hWnd,NULL);//显示菜单并获取选项ID
??????????? if(xx==IDR_SHOW)
??????????? {
??????????????? this->ShowWindow(SW_SHOW);
??????????????? SetForegroundWindow();
??????????????? DeleteTray();
??????????? }
??????????? else if(xx==IDR_OTHER) {MessageBox("你点击了“其他”菜单","提示",MB_OK);}
??????????? else if(xx==IDR_EXIT) {OnBnClickedCancel();}
??????????? HMENU hmenu = menu.Detach();
??????????? menu.DestroyMenu();
??????????? delete lpoint;
??????? }break;
??? case WM_LBUTTONDBLCLK:
??????? {
??????????? //双击不处理
??????? }break;
??? }
??? return 0;
}

void ScheduleDlg::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,"OA");
??? Shell_NotifyIcon(NIM_DELETE, &nid);
}

原文地址:https://www.cnblogs.com/greenleaf1976/p/12237345.html

时间: 2024-10-16 10:41:16

MFC添加图标到托盘的相关文章

如何修改MFC的图标

原文:如何修改MFC的图标 修改左上角的图标和任务栏里图标 在对话框构造函数中 CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } 改过后: CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDlg::IDD, pParen

子类化QMainWindows,添加菜单栏及工具栏,并添加图标

mymainwindow.cpp #include "mymainwindow.h" #include "ui_mymainwindow.h" //#include <QMenuBar>           //使用前向声明,不使用头文件包含的形式,主要是为了编译更快 class QMenuBar;//类的前向声明 myMainWindow::myMainWindow(QWidget *parent) :     QMainWindow(parent),

向Ubuntu的Dash中添加图标

首先准备.xpm图标文件,如果程序文件夹中没有,那么可以根据自己喜好到网上下载喜欢的图标,不要太大,然后将其改为.xpm文件(直接改了后缀名就行).然后打开/usr/share/applications/目录,可以看到里面有很多.desktop文件,我们要做的事情就是建立自己的.desktop文件(以eclipse应用程序为例). 1.建立eclipse.desktop文件,执行命令: sudo gedit /usr/share/applicastions/eclipse.desktop 2.在

Delph控制台(Console)程序添加图标和版权信息

Delphi创建控制台(Console)程序默认是无法添加图标和版权的.经过仔细的对比窗体程序与控制台程序源码,发现窗体程序的工程文中,在uses结束begin开始的地方有一句如下代码:{$R *.res}而控制台程序的工程文件里是没有这句代码的.于是,我就在想是不是我在控制台程序的工程文件里加上如上代码,我们就可以更改图标和添加版权了,说做就开始做,加上如上代码,然后保存,Delphi会自动生成资源文件,如下图:本以为可以就可以编辑图标和版权了,结果发现,版权是可以修改了,但是图标还是无法修改

为系统菜单添加图标--------暴力反射

1 import java.lang.reflect.Method; 2 3 import android.os.Bundle; 4 import android.provider.Settings; 5 import android.app.Activity; 6 import android.content.Intent; 7 import android.view.Menu; 8 import android.view.MenuItem; 9 import android.widget.T

MFC添加启动画面与CImage结合版

最近做一个启动画面,发现Splash只能加载bitmap,发现bitmap图片效果不太好,所以找了下在C++中有什么可以加载PNG或者JPG等类型的图片,在网上找半天后,发现CImage这个类相当好用,而且还可以和CBitmap相互转换,这样我只要修改一小段代码,就可以实现用位图以外的图片来做启动画面了,在找图片的时候也不这么麻烦,因为CImage基本支持多种图片格式,很好用.详细可以自行百度哦.下面附上代码. 1.在工程中添加C++类,CWzdSplash.基类是CWnd 添加代码: #ifn

MFC添加背景图片

1.在资源里导入一个bmp图片假设名称为IDB_BITMAP1 实现OnPaint方法 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP是你自己的图对应的ID BITMAP bitmap; bmpBack

input框添加图标,代替submit

input框添加图标,代替submit的意思是form表单中,将常规的提交按钮更改成图标,但是图标具有提交的功能 首先,我们先探讨下如何获取图标,我是从阿里巴巴图标库中下载的,因为改版的原因,网上的一些方法并不能保证下载下来完整的代码,所以我来贴一下具体的图片,说明下如何下载代码 进入官网,搜索需要的内容,加入购物车,下载源码步骤不同就在后面 点击添加至项目,选择下载至本地 下载完成后是一个压缩包,解压后,将红色框的字体文件添加到font文件夹,因为大家可以轻而易举的发现,这是四种不同的字体编码

Qt 程序和窗口添加图标

Qt项目在打包发布之后都需要有个个性的程序图标和窗口图标,这样会使程序更加美观大方,下面我们分别来看如何给程序和窗口分别添加图标.我们需要两种格式的图片,一种是.ico的,用来给程序添加图标,一种是.bmp或是.png的,用来给窗口添加图标. - 程序添加图标 如果使用的Qt Creator,那么用记事本创建一个后缀为.rc的资源文件,然后再其中添加: IDI_ICON1 ICON DISCARDABLE "xxx.ico" 注:xxx.ico为图标文件名称 然后修改工程文件(*.pr