MFC托盘图标

2024-03-30 19:38
文章标签 mfc 图标 托盘

本文主要是介绍MFC托盘图标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,首先我们用AppWizard创建一个基于对话框的应用程序CUserDlg。m_nid为类成员变量NOTIFYICONDATA m_nid;
2,实现CUserDlg的成员函数:

void ToTray(){m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);m_nid.hWnd = this->m_hWnd;m_nid.uID = IDR_MAINFRAME;m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ;m_nid.uCallbackMessage = WM_SHOWTASK; //托盘回调消息id//自定义的消息名称 WM_SHOWTASK 头函数中定义为WM_USER+1m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//托盘图标strcpy(m_nid.szTip,"托盘图标");//当鼠标放在上面时,所显示的内容Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盘区添加图标
}

3,#define WM_SHOWTASK WM_USER+1
4,添加消息WM_SHOWTASK的响应函数afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
在BEGIN_MESSAGE_MAP(CUserDlg,CDialog)和END_MESSAGE_MAP()之间加代码:
ON_MESSAGE(WM_SHOWTASK,onShowTask)
(3、4步可以通过向导来自动生成)


5,编写响应函数onShowTask:

LRESULT CUserDlg::onShowTask(WPARAM wParam,LPARAM lParam) //wParam接收的是图标的ID,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_SHOWNORMAL);//简单的显示主窗口}break;}return 0;
}


6,然后在OnInitDialog函数中调用ToTray();
7,为使应用程序退出时图标消失,映射WM_DESTROY消息,在OnDestroy()函数中加入:
::Shell_NotifyIcon(NIM_DELETE,&m_nid);

以上代码还存在一个问题,右键单击托盘图标,跳出菜单后无法消失。需要在menu.TrackPopupMenu前面加这么一句SetForegroundWindow();

这篇关于MFC托盘图标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862392

相关文章

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下,可以正常上网,说明主机有无限网卡且正常。然后我就直接开始安装Ubuntu20.04了,安装成功后发现wifi有图标但是搜不到热点,我想是不是无线网卡驱动有没有

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

控制台和MFC中内存泄露工具vld的使用

最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。    vld资源:    1)、大家可以移步下边的网址下载:     http://vld.codeplex.com/releases/view/82311    2

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或: 下图打对号,确定即可。

几种MFC对话框的隐藏方法

修改CXXAPP中的InitInstance函数,将原来的模态对话框改为非模态对话框,及修改 [cpp]  view plain copy INT_PTR nResponse = dlg.DoModal();     为 [cpp]  view plain copy dlg.Create(CModalHideDlg::IDD);

element-ui打包之后图标不显示,woff、ttf加载404

1、bug 起因 昨天在 vue 项目中编写 element-ui 的树形结构的表格,发现项目中无法生效,定位问题之后发现项目使用的 element-ui 的版本是 2.4.11 。看了官方最新版本是 2.15.14,然后得知 2.4.11 版本是不支持表格树形结构的。于是决定升级 element-ui 的版本,方便后续的开发。 升级之后本地简单的过了一遍系统功能,并没有发现有什么不妥,于

记录|C#的软件图标更换

目录 前言一、软件界面的图标二、软件外的图标更新时间 前言 参考文章: 自己开发出的软件,肯定要更换图标,无论是软件打开前还是软件上的。如下图: 一、软件界面的图标 直接在Form的属性中进行icon的更换【如下图:】 二、软件外的图标 在“资源管理”中,打开项目的属性,在属性中配置图标【如下图】 更新时间 2024.09.06:创建