VC++2005环境中实现程序托盘的代码

基于VC++与MFC的仿QQ客户端开发实战:架构设计与核心模块实现 Windows桌面开发是理解操作系统原理与图形界面编程的重要领域。其核心在于事件驱动模型与消息循环机制,通过封装系统API构建高效的原生应用。在技术价值上,它强调性能优化、资源管理及与操作系统的深度集成,尤其适合对执行效率有严格要求的工具软件。应用场景广泛,从传统办公软件到工业控制界面均有涉及。本文以即时通讯(IM)客户端为例,深入剖析了使用VC++与MFC技术栈实现一个完整项目的全过程,涵盖了**网络通信**中的TCP粘包处理与心跳机制,以及**多线程**编程下的UI同步与数据安全等关键实战技巧,为深入掌 阅读详情

(备注:工程名称——TP)

(一)  原理

1、最小化的原理:首先要将窗口隐藏,然后 在右下角绘制图标。

2、恢复的原理:将窗口显示,再将托盘中的图片删除。

(二) 实现步骤

1、定义自定义消息WM_SHOWTASK。在CTPDlg.h头文件中添加如下定义:#define WM_SHOWTASK WM_USER +101 (注:定义自定义消息,加的这个值一般都要大于100)。

2、在CTPDlg类的OnSysCommand(UINT nID, LPARAM lParam)函数体中添加如下代码:

 

    if(nID==SC_MINIMIZE)//当最小化窗体时

        ToTray(); //最小化到托盘的函数,具体定义在后面

 

 

 

3、在BEGIN_MESSAGE_MAP(CTPDlg, CDialog) ... END_MESSAGE_MAP()中添加消息映射:ON_MESSAG(WM_SHOWTASK,OnShowTask)其中WM_SHOWTASK是自己定义的消息名,即为TPDlg中定义的消息;OnShowTask是自己定义的消息响应函数,具体定义在后面。

4、在CTPDlg.h中声明消息响应函数:afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;声明ToTray()和DestroyTray()。

5、在CTPDlg.cpp中添加消息响应函数的实现、ToTray的实现和删除图标函数的实现。

6、程序的具体实现过程:当最小化窗体时,调用函数ToTray(),实现隐藏窗体,显示托盘图标;当在托盘图标上操作(如,双击左键或右键单击)时,触发自定义消息事件WM_SHOWTASK。

(三)实现代码

1、ToTray()的定义

void CTPDlg::ToTray()
{
    NOTIFYICONDATA  pnid;
    pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//该结构体大小
    pnid.hWnd=this->m_hWnd;    //窗口句柄
    //pnid.uID=(UINT)m_hIcon;      //图标句柄
    pnid.uID=IDR_MAINFRAME;//图标句柄
    pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; //图标有效|自定义消息有效|鼠标指向显示文字有效
    pnid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称,调用消息实现函数
    pnid.hIcon=m_hIcon;         //图标句柄
    lstrcpy((LPWSTR)pnid.szTip,TEXT("这是一个测试托盘的程序"));/*鼠标指向所显示的文字(在unicode下的表达方式,在非unicode的情况下可以用strcpy(pnid.szTip,"...")表达。*/
    Shell_NotifyIcon(NIM_ADD,&pnid);    //在托盘区添加图标    
    ShowWindow(SW_HIDE);    //隐藏主窗口
}

2、OnShowTask()的实现

LRESULT CTPDlg::OnShowTask(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,TEXT("关闭"));            
   //确定弹出式菜单的位置            
   menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);            
   //资源回收            
   HMENU hmenu=menu.Detach();            
   menu.DestroyMenu();            
   delete lpoint;        
  }           
  break;        
 case WM_LBUTTONDBLCLK://双击左键的处理        
  {             
   this->ShowWindow(SW_SHOW);
   DeleteTray();      
  }           
  break;        
 default:          
  break;   
 }    
 return 0;
}

3、删除图标函数实现

void CTPDlg::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,"程序名称");    //信息提示条为“程序名称” 
 lstrcpy((LPWSTR)nid.szTip,TEXT("程序名称"));    //信息提示条为“程序名称” 
 Shell_NotifyIcon(NIM_DELETE,&nid);    //在托盘区删除图标
}

 

LoadRunner11安装全攻略:从下载到破解的完整指南 本文提供了一份详尽的LoadRunner11安装与破解指南,特别针对Windows 10/11系统的兼容性问题。文章从准备工作、核心安装步骤、授权破解到首次配置与常见问题排雷,手把手教你如何成功部署这款经典的性能测试工具,并获取永久授权,使其在现代化操作系统上稳定运行。 阅读详情

相关推荐

UG NX安装避坑指南:从杀毒软件到环境变量,这些细节你注意了吗?

本文是一份详尽的UG NX安装避坑指南,针对安装过程中常见的“隐形陷阱”提供系统性解决方案。重点剖析了杀毒软件误删、环境变量设置、许可证服务器配置等关键环节的细节问题,旨在帮助用户一次性成功安装这款机械设计软件,避免因系统环境、路径命名或破解文件处理不当导致的反复失败。

pz89012345的博客 532

MFC中给应用程序添加托盘支持

是从网上找的,经过亲身实践,并且结合一些小修改,把这个过程整理出来(开发环境是vs2005):1:首先在Dlg.h中添加函数// 响应托盘图标事件 afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM IParam); 2:在Dlg.h中添加成员变量// 进行托盘图标显示支持的类结构 NOTIFYICONDATA NotifyIcon; 3:在Dlg.cpp中添加(这句话要添加在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间)

silence1214的专栏 1539

雨晨 26100.2454 Windows 11 24H2 专业工作站 极简纯净版:打造高效办公环境的终极选择

本文深度解析了雨晨 26100.2454 Windows 11 24H2 专业工作站极简纯净版。该系统基于官方原版深度优化,移除了Defender、Edge等冗余组件,保留了专业工作站全部核心功能,并集成了最新运行库。旨在为程序员、设计师等专业用户打造一个无干扰、资源专注的高效办公环境,是追求极致生产力用户的理想选择。

pandas7gardener的博客 506

VC++实现系统托盘功能(附带源码)

本项目的目标是利用Visual C++(VC++)开发一个简单的系统托盘应用,实现在系统托盘中显示一个图标,并提供右键菜单进行交互。用户可以通过右键菜单进行程序的退出、显示或隐藏等操作。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1630

DirectX修复工具报C++异常?7步系统排障法彻底解决

在Windows系统维护和软件开发中,Visual C++运行库是支撑众多应用程序运行的基础组件,其原理在于为使用Visual C++开发的软件提供必要的运行时函数库。稳定的运行库环境对于保障软件兼容性和系统健康至关重要,其技术价值体现在避免程序崩溃、确保功能正常。当运行库出现损坏、版本冲突或权限问题时,依赖它的工具(如DirectX修复工具)便可能抛出“C++异常”错误。本文聚焦于这一常见报错,从系统权限、组件依赖、服务状态等核心维度切入,提供一套从易到难、层层递进的实战排障指南,帮助用户高效解决因VC+

weixin_33671935的博客 348

游戏启动崩溃?深度解析Easy Anti-Cheat原理与系统级修复指南

软件启动失败与系统初始化崩溃是开发与运维中常见的棘手问题,其根源往往在于底层系统环境的不稳定或组件冲突。从技术原理上看,这类问题通常涉及内核级驱动权限争夺、运行时库依赖缺失、以及安全软件拦截等核心机制。以游戏反作弊系统Easy Anti-Cheat(EAC)为例,其作为内核驱动,因高权限监控特性极易与杀毒软件、性能工具等产生冲突,导致“启动即崩溃”。理解其工作原理——包括内存钩子、文件完整性校验等——不仅能解决特定游戏问题,更能举一反三,应用于排查诸如“qt运行程序直接崩溃没有输出”、“windows资源管

weixin_33709364的博客 381

vc++系统托盘

(一)  原理 1、最小化的原理:首先要将窗口隐藏,然后 在右下角绘制图标。 2、恢复的原理:将窗口显示,再将托盘中的图片删除。 (二)程序实现 1、自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER +1) 2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 806

MathType安装与DLL加载失败全攻略:从原理到实战解决

动态链接库(DLL)是Windows系统中实现代码复用和模块化的重要机制,其通过导出函数供应用程序调用,能有效减少内存占用并便于更新。然而,DLL加载失败是软件安装与运行中的常见问题,常由文件缺失、权限不足或依赖链断裂引发,直接影响软件功能与用户体验。在办公软件生态中,像MathType这类深度集成插件,其核心功能高度依赖特定的DLL文件正确加载。当出现“找不到指定模块”或“DLL初始化失败”错误时,往往意味着安装流程、系统权限或运行库环境存在异常。本文聚焦于MathType这一具体应用场景,系统性地剖析了

weixin_30897079的博客 344

Win11下Origin 8.0安装全指南:从环境准备到报错排查

科研绘图软件是学术工作流中的核心工具,承担着数据可视化与论文配图的重要角色。软件安装看似简单,实则涉及系统组件完整性、运行库依赖、权限配置与兼容性适配等多个底层原理。理解这些基础概念,能帮助科研人员快速定位安装失败的技术根因,从而降低环境配置成本,提升工作效率。在工程实践场景中,许多实验室仍基于特定版本沉淀了大量模板、脚本与工程文件,版本迁移代价高。因此,在Win11系统上复现旧版绘图软件的运行环境成为现实需求。本文以Origin 8.0为例,系统梳理安装前的系统自检、安装向导各选项的工程意义、补丁与验证流

weixin_33843947的博客 398

VC++ MFC对话框程序一键转为支持登录前启动的GUI型Windows服务

一套开箱即用的VC++6.0兼容工程,让传统MFC对话框程序同时具备Windows NT服务能力——服务进程可在系统启动、用户登录前就驻留运行,又能在用户会话中弹出标准MFC对话框实现交互。包内含完整可编译项目(.dsw/.dsp)、服务主控逻辑(SERVICE.CPP)、对话框类(T01Dlg.h/.cpp)、图标资源(.ico)、界面资源脚本(.rc/.rc2)及两份关键说明文本,明确强调‘既是MFC对话框,也是NT服务’和‘服务早于用户登录启动’两大特性。所有代码采用ANSI编码,不依赖.NET框架,

tech5的博客 183

VC++ 托盘程序(函数最全)

拿来就可以用,包括所有托盘程序实现方法,绝对好用!

DirectX修复工具V4.0增强版:解决游戏软件dll缺失与运行库问题的终极指南

动态链接库(DLL)是Windows系统中实现代码共享和模块化编程的核心组件,其缺失或损坏是导致软件无法启动的常见原因。从原理上讲,应用程序运行时需要调用特定的DLL文件,当系统环境不完整或版本冲突时,就会引发“找不到指定模块”等错误。这一问题的技术价值在于,它直接关系到软件的兼容性与系统稳定性,尤其在游戏开发和多媒体应用领域至关重要。在应用场景上,无论是运行大型3D游戏、专业图形设计软件,还是部署新的开发环境,都可能遭遇因DirectX组件或Visual C++运行库异常导致的故障。DirectX修复工具

weixin_34252686的博客 386

vc托盘程序

实现右下角出现托盘图标,以及右下角窗口的缓慢升起。

0xc0000142错误修复三招:告别应用程序无法正常启动

Windows应用程序启动时,遇到错误码0xc0000142是常见故障,它对应系统内部的DLL初始化失败,而非文件缺失。这类问题往往源于Visual C++运行库版本不匹配、系统组件损坏或权限异常。理解其原理有助于快速定位:程序将DLL加载进内存后,初始化环节崩溃导致启动流程中断。通过覆盖安装、修复运行库全家桶、以及DISM与SFC系统级体检,可以在不重装系统的前提下解决绝大多数案例。这套方法适用于老软件兼容、系统更新后罢工、绿色版软件报错等典型场景。掌握系统组件修复与运行库管理,是Windows运维和软件

weixin_34319111的博客 272

27.如何制作托盘程序?(Visual C++编程 源代码)

27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual C++编程 源代码)27.如何制作托盘程序?(Visual

水文预报新手别怕!用Matlab 18小时搞定马斯京根法参数K和x(附完整代码)

本文详细介绍了如何使用Matlab在18小时内快速掌握水文预报中的马斯京根法参数K和x的求解方法。通过完整的代码示例和分步解析,帮助新手从理论到实践快速跨越,解决传统手工试算耗时耗力的问题,提升水文预报的效率和精度。

weixin_42573113的博客 259

可在广域网部署运行的即时通讯系统 -- GGTalk总览(附源码下载)

  (最新版本:V6.2,2019.01.03 。Xamarin移动端版本已经推出,包括 Android 和 iOS)   GGTalk开源即时通讯系统(简称GG)是QQ的高仿版,同时支持局域网和广域网,包括客户端(PC客户端、android移动端)、服务端、数据库。从2013年最初的GG1.0开放源码以来,到后来陆续增加了网盘功能、远程协助功能、离线文件功能、群聊功能、...

dichijiang3134的博客 866

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复

本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。

weixin_29010003的博客 397

QQ高仿版

GGTalk(简称GG)是QQ的高仿版,包括客户端(PC客户端、android移动端)、服务端、数据库,可在广域网部署使用。我想写一个类似汇总的文章,通过这篇文章,大家可以了解到GG的全貌和最新进展,以及关于一些常见问题的解答也汇总在这里。   言归正传,对我个人而言,我的目标并不是做一个QQ高仿版的玩具,而是希望做成一个能够真正使用的产品(这个过程还有很长的路要走),并持续维护下去。 已实现的功能 (01)注册、登录、查找用户、添加好友、好友列表。 (02)自拍头像。 (03)文字聊天、字体设置

weixin_57836618的博客 1417

SPSS&Mplus—共同方法偏差(Common Method Bias)控制与检验

共同方法偏差(Common Method Bias)的控制方法:程序控制(Procedural)和统计控制(Statistical)。

m0_54401011的博客 1万+

【QML初学者文档】一问读懂QML基础开发(内附大量简单源码)

QML是Qt的一大特色,拥有强大的UI制作能力。但是想要学好QML,还需要一些细节和技巧的掌握。本篇文章将为你提供完整的QML知识体系,让你成为Qt的UI魔法师!

BenBierBa的博客 2万+
下一篇: vc++2005环境中使用strcpy出现错误
tx_yu
博客等级 码龄17年 8粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值