利用Visual C++实现系统托盘程序(1)

C++实现仿QQ系统托盘通知 我们将通过以下步骤来实现系统托盘通知:1. 初始化系统托盘图标和菜单。2. 创建并配置通知消息。3. 设置消息循环,以监听和响应用户的交互动作。接下来的章节将详细介绍如何在Visual Studio 2005环境下配置C++项目,并利用Windows API实现系统托盘通知的具体代码示例。我们将从环境准备开始,逐步深入到通知的具体实现和优化中。 阅读详情
导读:
  自从微软公司推出Windows 95操作系统以来,系统托盘应用作为一种极具吸引力的用户界面设计深受广大用户的喜爱。使用系统托盘作为用户界面的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。
  这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。本实例就介绍Visual C++开发这类程序的设计方法,该程序编译运行后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里;当鼠标光标移到托盘图标上时,在图标附近会显示提示信息;单击右键时弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令,另外,该程序还可以动态的改变托盘的图标。参照这个例子,相信读者能轻松自如地在自己的程序中应用系统托盘。
   一、实现方法
  为了实现拖盘程序,首先要使程序的主窗口不可见,这点实现起来十分容易,只要调用ShowWindow(SW_HIDE)就可以了,本实例采用的就是这种方法,还有一种思路是通过分别设置主边框窗口的风格和扩展风格来隐藏主框架:
  BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  {
  cs.style =WS_POPUP;//使主窗口不可见;
  cs.dwExStyle =WS_EX_TOOLWINDOW;//不显示任务按钮;
  return CFrameWnd::PreCreateWindow(cs);
  }
  在任务条上显示图标是利用系统API函数Shell_NotifyIcon()来将一个图标显示在任务栏的通告区中。该函数的原型为:
  BOOL Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid);
  该函数的第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:
  NIM_ADD: 添加一个图标到任务栏。
  NIM_MODIFY: 修改状态栏区域的图标。
  NIM_DELETE: 删除状态栏区域的图标。
  NIM_SETFOCUS: 将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
  NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。
  第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义如下:
  typedef struct _NOTIFYICONDATA {
  DWORD cbSize; // 结构大小(sizeof struct),必须设置
  HWND hWnd; // 发送通知消息的窗口句柄
  UINT uID; // 图标ID ( 由回调函数的WPARAM 指定)
  UINT uFlags;
  UINT uCallbackMessage; // 消息被发送到此窗口过程
  HICON hIcon; // 任务栏图标句柄
  CHAR szTip[64]; // 提示文本
  } NOTIFYICONDATA;
  该结构中uFlags的值分别为:
  #define NIF_MESSAGE 0x1 // 表示uCallbackMessage 有效
  #define NIF_ICON 0x2 // 表示hIcon 有效
  #define NIF_TIP 0x4 // 表示szTip 有效
  在该结构的成员中,cbSize为该结构所占的字节数,hWnd为接受该图标所发出的消息的窗口的句柄(鼠标在任务栏上程序图标上动作时图标将发出消息,这个消息用户要自己定义),uID为被显示图标的ID,uFlags指明其余的几个成员(hIcon、uCallBackMessage和szTip)的值是否有效,uCallbackMessage为一个用户自定义的消息,当用户在该图标上作用一些鼠标动作时,图标将向应用程序的主框架窗口(hWnd成员中指定的窗口)发出该消息,为了使程序的主框架得到该通知消息,需要设置NOTIFYICONDATA 结构的flag成员的值为NIF_MESSAGE。hIcon为将在任务栏上显示的图标句柄,szTip鼠标停留在该图标上时显示的提示字符串。
  尽管Shell_NotifyIcon函数简单实用,但它毕竟是个Win32 API,为此本实例将它封装在了一个C++类中,这个类叫做CTrayIcon,有了它,托盘编程会更加轻松自如,因为它隐藏了NOTIFYICONDATA、消息代码、标志以及一些繁琐的细节。

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

相关推荐

控制台窗口最小化到托盘

控制台窗口最小化到托盘,点击最小化后的托盘图标恢复 Console opens, you press minimize, it minimizes to tray, you click icon, it maximizes

C++学习笔记(6)常用程序功能实现-系统托盘

系统托盘功能如下图所示,是指在操作系统工具栏右侧下方显示的应用图标所承载的部分系统功能。系统托盘的主要功能包含:创建托盘图标、响应托盘事件、删除托盘图标等功能。下面我们来逐步完成相关功能的实现系统托盘一般在窗口主程序最小化时出现,在窗口主程序恢复时删除,此次我们先通过菜单操作来实现显示和删除系统托盘图标的功能,最后再讲解Windows系统菜单消息如何截获处理。

tlzxp的博客 1199

控制台窗口托盘图标

这个小程序实现控制台窗口的托盘图标的小功能。有兴趣的可以看看。

c++ 系统托盘

//设置系统托盘 1.定义成员变量: NOTIFYICONDATA NotifyIcon;//系统托盘类 2.创建系统托盘 NotifyIcon.cbSize = sizeof(NOTIFYICONDATA); NotifyIcon.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); Not...

黑兔子JH的博客 1124

利用Visual C++实现系统托盘程序

自从微软公司推出Windows 95操作系统以来,系统托盘应用作为一种极具吸引力的用户界面设计深受广大用户的喜爱。使用系统托盘作为用户界面的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类似程序

yyq19890202的专栏 4512

C++Qt windows系统托盘增加图标和功能

windows系统托盘增加图标和功能 C++ Qt

qq_40135848的博客 649

C++ 最小化到托盘

C++程序添加最小化托盘功能 Shell_NotifyIcon

赤龙绕月的专栏 4400

利用Visual C++实现系统托盘程序(2)

导读:   二、编程步骤   1、 启动Visual C++6.0,生成一个单文档的应用程序TrayTest,取消文档视图支持;   2、 在CMainFrame类中添加自定义消息#define WM_MY_TRAY_NOTIFICATION WM_USER+0,并在该类中为此自定义消息手动添加消息映射ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNo

zk520的专栏 913

利用Visual C++实现系统托盘程序(3)

导读:   LRESULT CTrayIcon::OnTrayNotification(WPARAM wID, LPARAM lEvent)   {   if (wID!=m_nid.uID    (lEvent!=WM_RBUTTONUP &&lEvent!=WM_LBUTTONDBLCLK))   return 0;   CMenu menu;//装载上下文菜单;   if (!men

zk520的专栏 512

c++实现系统托盘图标

 自从微软公司推出Windows 95操作系统以来,系统托盘应用作为一种极具吸引力的用户界面设计深受广大用户的喜爱。使用系统托盘作为用户界面的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类

小金的专栏 5081

一个c++做的托盘程序

一个c++托盘程序,很经典的,经过调试运行成功的

系统托盘程序c++

c++写的win32(MFCbased)系统托盘应用程序。systemtray_src封装了托盘类。systemtraySDK_demo,mfc演示程序。在vc6.0与vs2008下编译通过。

win32 窗口程序实现控制台信息跟踪 简单案例

// test.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "test.h" #include using namespace std; #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING];

在梦中享一刻静谧,等待梦中的你 1278
上一篇: 利用Visual C++实现系统托盘程序(2)
下一篇: 利用Visual C++实现系统托盘程序(3)
zk520
博客等级 码龄19年 0粉丝 28原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值