用VC设计托盘图标程序

作者&投稿:植史 (若有异议请与网页底部的电邮联系)
~

  在Windows操作系统中 任务栏的右边(托盘)会常驻几个图标 如输入法切换图标 音量控制图标等 此外我们还经常遇到具有托盘图标的软件 如金山词霸 实时监测功能的杀毒软件等 这些软件在后台运行 通常不占用太多的屏幕资源 只在通知栏上放一个小小的标志 必要时我们可以通过用鼠标点击图标对其进行选单操作或激活其主窗口 有时我们自己编写的程序也希望有类似的效果 本文将详细地介绍用VC设计托盘图标程序的方法   一 NOTIFYICONDATA结构   NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息 它包括选择的图标 回调消息 提示消息和图标对应的窗口等内容 其定义为   typedef struct—NOTIFYICONDATA {   DWORD cbSize;   //以字节为单位的这个结构的大小   HWND hWnd;   //接收托盘图标通知消息的窗口句柄   UINT uID;   //应用程序定义的该图标的ID号   UINT uFlags;   //设置该图标的属性   UINT uCallbackMessage;   //应用程序定义的消息ID号 此消息传递给hWnd   HICON hIcon; //图标的句柄   char szTip[ ]; //鼠标停留在图标上显示的提示信息   } NOTIFYICONDATA ?PNOTIFYICONDATA;   该结构中 成员uFlags可以是下列的组合或其中之一   NIF_ICON 设置成员hIcon有效   NIF_MESSAGE 设置成员uCallbackMessage有效   NIF_TIP 设置成员szTip有效   二 Shell_NotifyIcon函数   全局函数Shell_NotifyIcon()用于在托盘上增加 删除或修改图标 其原型为   WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage PNOTIFYICONDATA pnid);   Pnid是上面的NOTIFYICONDATA结构的指针   dwMessage是被传递的消息 可以是以下消息之一   NIM_ADD 增加图标   NIM_DELETE 删除图标   NIM_MODIFY 修改图标   三 托盘图标程序设计示例   首先我们用AppWizard创建一个不基于文档和视图结构的应用程序Tray 我们并不想在应用程序启动时显示主窗口 所以需要删除应用程序类CTrayApp中成员函数InitInstance()的以下两句代码   pFrame 〉ActivateFrame();   pFrame 〉ShowWindow(SW_SHOW);   在CMainFrame类中加入NOTIFYICONDATA结构的保护成员变量m_tnid 并在其OnCreate函数中return语句前加入生成托盘图标的代码   m_tnid cbSize=sizeof(NOTIFYICONDATA);   m_tnid hWnd=this 〉m_hWnd;   m_tnid uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;   m_tnid uCallbackMessage=MYWM_NOTIFYICON;

  //用户定义的回调消息   CString szToolTip;   szToolTip=_T( 托盘图标实例 );   _tcscpy(m_tnid szTip szToolTip);   m_tnid uID=IDR_MAINFRAME;   HICON hIcon;   hIcon=AfxGetApp() 〉LoadIcon(IDR_MAINFRAME);   m_tnid hIcon=hIcon;   ::Shell_NotifyIcon(NIM_ADD &&m_tnid);   if(hIcon)::DestroyIcon(hIcon);   返回消息的ID应在主框架类的头函数中定义   #define MYWM_NOTIFYICON WM_USER+   为了处理图标返回消息 如鼠标左键双击 鼠标右键单击消息 我们重载WindowProc()函数 此外 我们还希望在主框架窗口最小化时图标不在任务栏的空白区出现 在此函数中同时作相应处理   LRESULT CMainFrame::WindowProc(UINT message WPARAM wParam LPARAM lParam)   {   switch(message){   case MYWM_NOTIFYICON:   //如果是用户定义的消息   if(lParam==WM_LBUTTONDBLCLK){   //鼠标双击时主窗口出现   AfxGetApp() 〉m_pMainWnd 〉ShowWindow(SW_SHOW);   }   else if(lParam==WM_RBUTTONDOWN){ //鼠标右键单击弹出选单   CMenu menu;   menu LoadMenu(IDR_RIGHT_MENU); //载入事先定义的选单   CMenu?pMenu=menu GetSubMenu( );   CPoint pos;   GetCursorPos(&&pos);   pMenu 〉TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON pos x pos y AfxGetMainWnd());   }   break;   case WM_SYSMAND:   //如果是系统消息   if(wParam= =SC_MINIMIZE){   //接收到最小化消息时主窗口隐藏   AfxGetApp() 〉m_pMainWnd 〉ShowWindow(SW_HIDE);   return ;   }   break;   }   return CFrameWnd::WindowProc(message wParam lParam);   }   为使应用程序退出时图标消失 映射WM_DESTROY消息 在OnDestroy()函数中加入   ::Shell_NotifyIcon(NIM_DELETE &&m_tnid);   至此 托盘图标程序的常规功能我们均已实现 我们还可以通过Shell_NotifyIcon()函数的调用实现不同状态下图标的改变   本程序在VC++ Windows / Professional下调试通过 lishixinzhi/Article/program/net/201311/11634




VC读取内存数据?
如果进程是指定的,直接openprocess,...然后...再...去读就行了.if pId!=NULL 这个过程可以省了.擦除,也不用了.我不知道我的理解对不对,如果你是想达到结束进程的效率,我可以明确告诉你,不要这么做.你应该从系统的内存管理机制入手.对于,找托盘栏图标的HWND,用Findwindow不是 最好的办法.用托...

vc++的mfc怎么控制窗口的最大小最小化还原
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;nid.uCallbackMessage=WM_SHOWTASK;\/\/自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));StrCpy(nid.szTip,L"♀冰封星耀♂"); \/\/信息提示条 Shell_NotifyIcon(NIM_ADD,&nid); \/\/在托盘区添加图标 Show...

Visual C++范例开发大全的目录
第1篇 VC++入门与基本文档视图第1章 Visua C++ 6.0 MFc程序设计快速入门(教学视频:5分钟)1.1 VisualC++6.0开发环境简介1.2 创建VisualC++6.0应用程序实例001 创建第一个MFC应用程序实例002 创建第一个C++应用程序第2章 文档视图应用程序实例(教学视频:159分钟)2.1 窗体操作实例003 实现...

...怎么去让它最小化到系统托盘运行,点击图标后会显示出主界面?_百 ...
增加消息函数声明,就放在其他很多的afx_msg系列函数一起就行:afx_msg void OnNotifyIcon(WPARAM, LPARAM);2:在cpp中修改如下内容:ifdef _DEBUG define new DEBUG_NEW undef THIS_FILE static char THIS_FILE[] = __FILE__;endif 在以上内容段下面增加如下自定义消息定义 define WM_NOTIFY_ICONWM...

Visual C++典型模块与项目实战大全的目录
8.6.10 处理托盘图标消息 2698.6.11 实现播放器的拖动功能 2708.6.12 实现播放器的音量控制功能 2708.6.13 绘制播放器界面 2718.6.14 监控音乐的播放器进度 2738.7 小结 274第9章 视频播放器(directshow技术) 275教学视频:37分钟9.1 视频播放器简介 2759.1.1 视频播放器功能总述 2759.1.2 打开视频文件 276...

隐藏最小化在任务栏上的程序图标
2、使用热键操作。在GoHide的主界面中列出了当前运行的所有程序,用户选择后,可继续进行原来的工作,在需要的时候(不用切换到GoHide)一按热键即可隐藏选定的程序窗口;3、能隐藏QQ、MSN messager等在Windows任务栏的系统通知区域(系统托盘)有图标的程序!这是GoHide在所有同类窗口隐藏软件的一大秘技!4...

怎样修改QQ的托盘图标呀?
像这样的么?

C++,按一个按钮后最小化窗口实现代码
nd.hIcon = m_hIcon;strcpy(nd.szTip, "PTZ Panel"); \/\/提示文字 Shell_NotifyIcon(NIM_ADD, &nd); \/\/ 将图标从系统托盘中删除 NOTIFYICONDATA nd;nd.cbSize = sizeof (NOTIFYICONDATA);nd.hWnd = m_hWnd;nd.uID=IDI_ICON; \/\/保证删除的是我们的图标,没这,托盘图标还在,鼠标放在上面...

VB 记录文件和文件夹的操作
4.当单击关闭按钮时,自动缩小到图标栏(系统托盘)。form_unload时,Cancel = 1 托盘参考:http:\/\/zhidao.baidu.com\/question\/113939192.html?si=1 5.隐藏进程。这个不光VB难做,ASM、VC++又很难做。(难做是指不一定成功)参考:http:\/\/zhidao.baidu.com\/question\/19462814.html?si=2 6....

如何编辑dll文件
1、首先去百度搜索VB Decompiler Pro软件下载到电脑文件家夹里。2、我们双击打开上图所示下载的软件,打开注册之后点击“Activate”按钮。3、提此时界面上会提示注册成功,我们点击确定,就可以打开VB Decompiler Pro主程序了。4、然后我们进入软件主界面,点击界面上方菜单栏里的File选项目录下的Open program...

吉隆县15868933382: VC中怎样建立一个只有系统托盘的程序
坚力氢化: 其实这个建立的过程很简单,与系统托盘通信的函数只有一个:Shell_NotifyIcon(DWORD dwMessage ,PNOTIFYICONDATA pnid). 第一个参数dwMessage 的取值有NIM_ADD 、NIM_MODIFY及NIM_DELETE.第二个参数pnid 是...

吉隆县15868933382: VC托盘程序制作 -
坚力氢化: NOTIFYICONDATA m_tnid 设置成员函数 最后 OnDestroy()里 删除系统托盘 ::Shell_NotifyIcon(NIM_DELETE,&m_tnid); //////////////////定义系统托盘/////////////////////////// m_tnid.cbSize=sizeof(NOTIFYICONDATA);//设置结构大小// m_tnid.hWnd=...

吉隆县15868933382: vc初始化程序直接最小化到托盘的代码
坚力氢化: 给程序加上系统托盘图标:http://www.vckbase.com/bbs/prime/viewprime.asp?id=260 下面是简单的代码: ------------------------------------------------------------- NOTIFYICONDATA nid; //初始化系统托盘图标 nid.cbSize = sizeof(NOTIFYICONDATA); nid....

吉隆县15868933382: vc 最小化到托盘时的动画效果 怎么做? -
坚力氢化: 不用获取,你自己定义2个就行.CONST RECT *lprcFrom, // rectangle coordinates (minimized) CONST RECT *lprcTo // rectangle coordinates (restored) 这2个就是代表你程序界面在最小化和恢复时的窗口大小和位置.

吉隆县15868933382: C++编写的托盘图标
坚力氢化: 声明一个自定义消息用于响应托盘消息: #define WM_NOTIFYICON WM_USER + 0x01 在CreateWindow后添加如下代码创建托盘图标:// 需添加头文件Shellapi.h NOTIFYICONDATA nid = {0};nid.cbSize = sizeof(NOTIFYICONDATA); nid....

吉隆县15868933382: VC图标托盘程序中的问题
坚力氢化: 正常了还不就行了! 我觉得可能是这个原因:在NOTIFYICONDATA中的这个值hWnd时,符给这个变量的值hWnd还没有被初始化,所以符给的值不是正确的值,是没有被初始化的值! 我试了一下,确实是这样子的! 不信你只把符给这个值的这句话单独地放到类的初始化中,就会出现你说的这种情况!

吉隆县15868933382: VC编程如何获得一个软件图标的具体位置?
坚力氢化: 掉用大漠 找图 函数 就能实现

吉隆县15868933382: VC6添加托盘图标成功,在win7下图标自动隐藏后不会自动显示出来 -
坚力氢化: 隐藏,显示其他程序的托盘图标(此为Delphi代码) Delphi USES Commctrl,ShellAPI procedure TForm1.Button1Click(Sender: TObject); var TBHWND:HWND;i,count:integer;PID,PRC: THandle;Buff: PChar;Info: _TBBUTTON;R: Cardinal;S: ...

吉隆县15868933382: C#中最小化怎么做托盘图标啊 -
坚力氢化: C#中的托盘技术 2007-07-01 20:03:38|分类:记忆C#|留言:1|浏览:5|编辑全文 建个WinForm项目,其它操作略过.拉个NotifyIcon控件,将属性Visable设置成False 没有Icon图标 还要加 Icon图 用Form的SizeChanged事件,代码如下:窗口最...

吉隆县15868933382: C++,如何不创建窗口,只创建托盘图标. -
坚力氢化: CreateWindow 完了不ShowWindow 隐藏起来 、或者你可以试试 GetDeskTopWindow得到桌面的句柄函数功能:该函数返回桌面窗口的句柄.桌面窗口覆盖整个屏幕.桌面窗口是一个要在...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网