mfc 托盘技术(taskbar status area)

MFC系统托盘的实现 通常电脑里边的软件,当你打开后会在电脑最右下角的任务栏上生成一个系统托盘,当你点击最小化或者点击关闭按钮后,若想恢复窗口,可以左键双击或者单机这个系统图标,同时鼠标右键点击,又会有其他的菜单弹出,比如退出。 我看着感觉还是挺酷炫的,所以打算也在我的程序里边添加一个这样的功能。下边我把我自己探索的过程记录一下: 首先,我们需要用到NOTIFYICONDATA类,它是我们实现系统托盘的核心。关于这个 阅读详情

 1.让自己所编软件的图标显示在 taskbar status area(任务栏)处

创建一个基于对话框的MFC程序HelloWorld,在CHelloWorldDlg类中新建一个成员函数void InitNotifyIconData(void)。其具体实现如下

void CsupernotepadDlg::InitNotifyIconData(void)
{
 /*NOTIFYCONDATA structure contains the information that the system
 needs to process taskbar status area message*/
 NOTIFYICONDATA nd;

 //the size of this structure,in bytes
 nd.cbSize = sizeof(NOTIFYICONDATA); 

 //a handle to the window that receives the notification message associated with an icon in the taskbar status area
 nd.hWnd = m_hWnd;

 //the application-defined identifier of the taskbar icon
 nd.uID = IDR_MAINFRAME; 

 //Flags that indicate which of the other members contain valid data
 nd.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;

 // is the identifier.The system use it to send notification to the window identified in hWnd
 nd.uCallbackMessage = WM_SHELLNOTIFY;    // 自定义消息。当在托盘图标上有鼠标事件时,发送该消息

 nd.hIcon = m_hIcon;

 lstrcpy(nd.szTip,_T("HelloWorld"));
 //send the message to the taskbar status area
 Shell_NotifyIcon(NIM_ADD,&nd);
}

// 自定义消息(即上面的SHELLNOTIFY消息)响应函数

LRESULT CsupernotepadDlg::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;
   int pMenuID = 0;

   VERIFY(menu.LoadMenu(IDR_MENU1));//得到菜单
   CMenu* pPopup = menu.GetSubMenu(pMenuID);//得到子菜单
   ASSERT(pPopup != NULL);
   
   DWORD Made = pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,lpoint->x,lpoint->y,this,NULL);//使用子菜单
   
   switch(Made)
   {
   case  ID_MENUITEM32771: {DestroyWindow();} break;
   case  ID_MENUITEM32772: {ShowWindow(SW_SHOW);ShowWindow(SW_SHOWNORMAL);}  break; 
   case  ID_MENUITEM32773: {CAboutDlg dlgAbout;dlgAbout.DoModal();}  break; 
   }

   pPopup->DestroyMenu();
   HMENU hmenu=menu.Detach();//资源回收
   menu.DestroyMenu();
   delete lpoint;
  }

  break;
 case WM_LBUTTONDOWN://左键的处理
  {
  
   ShowWindow(SW_SHOW);  //简单的显示主窗口完事儿
   ShowWindow(SW_SHOWNORMAL); //可以避免原来的最小化
  }
  break;
 }
 return 0;
}

最后,需要在HelloWorldDlg.h中添加如下代码

#define WM_SHELLNOTIFY (WM_APP + 1)

在cpp文件中加入自定义消息宏,将自定义消息和响应函数关联起来

ON_MESSAGE(SHELLNOTIFY,OnShowTask)

2.关闭程序时自动清除图标

在类视图中,右击CsupernotepadDlg,选择“属性”(properties),点击“消息”(message),添加WM_ONDESTROY,在生成的OnDestroy函数中填写如下代码

void CsupernotepadDlg::OnDestroy()
{
 CDialog::OnDestroy();

 // TODO: Add your message handler code here
 NOTIFYICONDATA nd;
 nd.cbSize = sizeof(NOTIFYICONDATA);
 nd.hWnd  = m_hWnd;
 nd.uID       = IDR_MAINFRAME;

 //DELETE THE ICON
 Shell_NotifyIcon(NIM_DELETE,&nd);
}

3.实现点击最小化按钮时,程序最小化到任务栏

在CHelloWorldDlg类中加载onsize消息(方法同上),

void CHelloWorld::OnSize(UINT nType, int cx, int cy)
{
 CDialog::OnSize(nType, cx, cy);

 // TODO: Add your message handler code here
 if( nType = SIZE_MINIMIZED )
 {
  //hide this window and passes the activition to another window
  ShowWindow(SW_HIDE);
 }
}

MFC托盘处理 一、托盘简介 所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、托盘编程相关函数 把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。 绘制图标以及确定图标所传送消息的函数只有一个: WINSH 阅读详情

相关推荐

MFC添加托盘图标,实现点击显示/隐藏窗口,添加托盘右键菜单

如果

m0_60352504的博客 987

利用MFC实现一个托盘功能

在BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) 与END_MESSAGE_MAP()之间添加自定义消息。在BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) 与END_MESSAGE_MAP()之间添加自定义消息。在CMFCApplication2Dlg::OnInitDialog进行初始化。OnSysCommand的实现。右键点击托盘,弹出如下的图标。

zjq_love的博客 1209

使用MFC编程获取Windows桌面底部任务栏的自动隐藏状态并进行相应的操作

在Windows操作系统中,任务栏是一个重要的用户界面元素,它通常位于桌面底部并用于显示当前运行的应用程序和系统通知。本文将介绍如何使用MFC编程获取Windows桌面底部任务栏的自动隐藏状态,并根据需要进行取消自动隐藏或重新设置自动隐藏。此外,为了使用相关的函数和结构体,我们需要包含正确的头文件,并将相关的库文件添加到项目中。标志位,这将取消任务栏的自动隐藏状态,并使其始终显示在桌面上。接下来,如果我们想要取消任务栏的自动隐藏状态,我们可以使用。标志位,这将重新将任务栏设置为自动隐藏状态。

2301_79325657的博客 359

MFC 手把手教你实现托盘应用程序

当你打开后会在电脑最右下角的任务栏上生成一个系统托盘,当你点击最小化或者点击关闭按钮后,若想恢复窗口,可以左键双击或者单机这个系统图标,同时鼠标右键点击,又会有其他的菜单弹出,比如退出。此时,运行程序,点击最小化,发现窗口被隐藏了,且任务栏图标消失,点击托盘上的图标没有响应,并且只能通过 任务管理器 关闭程序。WM_ICON_NOTIFY:是后面我们要定义的程序响应菜单。此时,运行程序,关闭窗口,会发现右下角的图标会同时消失。将鼠标移动到右下角的下标,会显示“我的托盘程序”。在文件最开始的定义定义两个宏。

m0_72895175的博客 706

MFC/VC++中的程序托盘实现指南

本文还有配套的精品资源,点击获取 简介:在Windows系统中,程序托盘是一个位于任务栏右下角的区域,它显示应用程序图标并提供快捷操作。MFC是微软的C++类库,用于简化Windows应用开发,包括对托盘图标的支持。本文详细介绍了如何使用MFC/VC++在Windows应用程序中实现程序托盘,涵盖创建图标、添加到托盘、处理用户交互事件以及为图标添加右键菜单的完整步骤。通过这...

weixin_29859471的博客 1469

Visual Studio 2010 MFC托盘应用程序实战

本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Visual Studio 2010中利用MFC库创建一个托盘应用程序的过程。该实例展示了如何在单文档界面基础上,将应用程序最小化至系统托盘,并响应用户交互如点击图标弹出菜单等。通过具体的步骤,包括创建项目、添加图标资源、修改窗口类行为和添加托盘图标处理逻辑,学习者可以掌握如何实现一个标准的托盘应用程序,并通过实践提高...

weixin_42126677的博客 1719

MFC:程序的托盘显示

程序的托盘显示

憧憬,思考,奋斗,飞翔 460

【XR技术介绍】深度解析|AI眼镜核心技术架构:从硬件层到端云AI全链路拆解

本文将逐层拆解AI眼镜完整技术架构,梳理硬件、感知、光学、端侧AI、软件云端五大核心层级,剖析核心数据流与行业技术瓶颈,同时附上标准化技术架构图,适合技术学习、方案汇报、行业科普使用。

houdou112358的博客 439

MFC 应用最小化到系统托盘

本指南将实现MFC应用程序在关闭时最小化系统托盘的功能,并左键和右键系统托盘图标进行交互。

Darker的博客 1155

再生龙(clonezilla)镜像比目标盘大——基于centos8.5

再生龙恢复到小盘遇到的问题及处理,首先是修改分区大小,进入dracut模式后再尝试恢复临时系统。

u010101453的博客 3690

云桌面如何部署?云桌面系统方案部署详细教程

云桌面作为一种比较新的技术工具,核心解决的场景是方便设计师的灵活办公,本身技术就是非常的灵活性,所以在安装部署方面青椒云也做到了十足的灵活。

2301_79113726的博客 1634

MFC之托盘

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33894640的博客 208

Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量

在移动互联网时代,H5页面因其跨平台、低成本、易传播的特性,成为许多企业的首选。Uniapp作为一款优秀的前端跨端开发框架,能够快速开发H5、小程序、App等多端应用。然而,由于Uniapp默认采用SPA(单页应用)架构,H5端在SEO(搜索引擎优化)方面存在一定劣势,如爬虫难以抓取动态内容、页面标题和描述不易优化等。 本文将系统性地介绍Uniapp H5端的SEO优化方案,涵盖基础优化、SPA优化策略、内容优化、技术优化、外部优化及监测分析,帮助开发者提升网站在搜索引擎中的排名,获取更多自然流量。

vvilkin的学习备忘 1973

MFC 实现托盘图标菜单图标功能

本文深入解析MFC托盘图标右键菜单图标实现方法,详解MF_OWNERDRAW与MF_STRING的区别,并提供完整源码。

Darker的博客 1465

告别卡顿闪烁!在Cesium 1.134中集成SOG格式,让400万高斯秒级加载

本文详细介绍了如何在Cesium 1.134中集成SOG格式,实现400万高斯数据的秒级加载,解决传统加载方式导致的卡顿和闪烁问题。通过空间索引重构、属性量化编码和WebGPU原生支持等技术,SOG格式显著提升了三维地理空间可视化的性能。文章还提供了环境准备、模型转换和Cesium集成的实战指南,帮助开发者高效优化项目。

weixin_29313817的博客 499

YOLOv5改进——添加SimAM注意力机制

这样可以使注意力机制看到整个backbone部分的特征图,将具有全局视野,类似于一个小的transformer结构。注意:很多改进教程都是将代码直接复制到common.py文件,如果改进机制多了容易造成混乱。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。在models文件夹下,复制yolov5s.yaml文件,粘贴并重命名为yolov5s-simam.yaml。运行yolo.py,出现刚刚加入的SimAM注意力机制,说明加入成功。

2302_80099075的博客 1653

VC托盘编程

以VC编程中,经常涉及到托盘操作,比如为我们的程序添加托盘图标,添加托盘左键响应或右键菜单,我们常用的QQ就是个托盘程序。 好了下面我们来看下VC中托盘编程要注意些什么。首先我们要弄清楚一个结构体-NOTIFYICONDATA,这个结构体是托盘编程的关键。 typ

hjs1122的专栏 894

YOLOv11改进策略【模型轻量化】| 替换华为的极简主义骨干网络:VanillaNet

本文记录的是基于VanillaNet的YOLOv11轻量化改进方法研究。VanillaNet的极简主义在于无 shortcut 连接,并且在网络的每个阶段仅使用一层卷积,无额外复杂模块,仅通过自身简洁的架构设计和训练策略,实现有效地训练和优化。本文在替换骨干网络中配置了原论文中的、和11种模型,以满足不同的需求。

Limiiiing的博客 1726

【MFC】托盘程序开发示例(详细实现步骤)

概述: 什么是托盘应用程序?   当你打开后会在电脑最右下角的任务栏上生成一个系统托盘,当你点击最小化或者点击关闭按钮后,若想恢复窗口,可以左键双击或者单机这个系统图标,同时鼠标右键点击,又会有其他的菜单弹出,比如退出。像QQ等可以停靠在电脑桌面的右下方: 实现操作步骤 (1)首先新建一个MFC项目    (2)在CTrayIconDlg.cpp文件中的OnInitDialog...

渲染引擎开发 2308

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2720

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MFC 托盘模式

为对话框程序增加托盘模式,左键双击托盘图标重新显示窗口,右键单击托盘图标显示下拉菜单,可点击关闭。 1,在对话框类的头文件中添加:       #define WM_NC WM_USER+1 #define IDI_NOTIFYICON 100 //添加成员函数afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM lParam); void

July's Pensieve 777

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MFC实现程序托盘

今天将程序托盘加入了正在开发的程序中,实现如下。 使程序托盘我们这里要用到了一个结构体NOTIFYICONDATA,它包含了系统需要用来传递托盘区域信息的消息;还有需要用到一个函数Shell_NotifyIcon,它的作用是对拖 盘图标进行显示与删除。 STRUCT NOTIFLYICONDATA { cbSize //结构体的大小,以字节为

Sky 620

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【MFC】最小化到托盘

/增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口,将程序结束。//声明一个弹出式菜单。case WM_LBUTTONDBLCLK://双击左键的处理。//右键起来时弹出快捷菜单,这里只有一个“关闭”//最小化到托盘的函数。//信息提示条为“计划任务提醒”2、定义最小化和托盘双击事件。//简单的显示主窗口完事儿。//确定弹出式菜单的位置。//自定义的消息名称。//在托盘区删除图标。

WBB101100的博客 1080

托盘功能的实现(MFC)

托盘功能在很多地方都用到,比如我们每天用的QQ,当点击最小化的时候QQ主界面会自动隐藏,在桌面的右下角看到一个QQ图标,当双击QQ图片的时候又能将主界面显示出来。实现这种托盘功能的实现很简单,下面给出托盘功能的实现过程:   1 在类中添加一个NOTIFYICONDATA

代码人生 2383
上一篇: 窗口刷新的几个函数:Invalidate UpdateWindow RedrawWindow
下一篇: QFileSystemModel类显示根目录不起作用及setRootPath、setRootIndex函数的区别
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值