程序最小化到托盘

合集下载

C#窗体的最大化最小化还原最小化到托盘NotifyIcon的代码实现

C#窗体的最大化最小化还原最小化到托盘NotifyIcon的代码实现

C#窗体的最⼤化最⼩化还原最⼩化到托盘NotifyIcon的代码实现1.最⼩化

WindowState = FormWindowState.Minimized;

//最⼩化时隐藏窗体

this.Visible=false;

2.最⼤化

WindowState == FormWindowState.Maximized;

3.还原为正常

WindowState == FormWindowState.Normal;

4.在托盘显⽰

打开 的⼯具箱,然后选择NotifyIcon,拖到Form上,在属性中Icon中设置图象添加⼀个ContextMenu,输⼊需要的选择项在 NotifyIcon中的ContextMenu属性中可以设置刚添加的ContextMenu 点托盘上的图标就可以显⽰选择项

实例部分代码:

#region 还原窗体

private void normalForm()

{

//this.AutoScaleBaseSize = new System.Drawing.Size(5, 15);

//this.ClientSize = new System.Drawing.Size(504, 267);

this.Visible = true;

//this.WindowState=FormWindowState.Normal;

}

#endregion

#region 最⼩化窗体并在托盘显⽰,隐藏窗体

private void minForm()

{

WindowState = FormWindowState.Minimized;

JavaSwing开发,将程序最小化至系统托盘_☆时光☆_百度空间

JavaSwing开发,将程序最小化至系统托盘_☆时光☆_百度空间

JavaSwing开发,将程序最小化至系统托盘_☆时光☆_百度空间

Java Swing开发,将程序最小化至系统托盘

下面的函数是最小化至托盘的按钮的点击响应函数。

private void minimizeButtonActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

if (SystemTray.isSupported()) // 判断系统是否支持系统托盘

{

SystemTray sysTray = SystemTray.getSystemTray(); // 获得系统托盘

Image image = null;

try {

image = ImageIO.read(MainFrame.class.getResource("/res/icon.jpg")); // 载入图片,这里要写你的图标路径哦

} catch (IOException e) {}

// 创建弹出菜单

PopupMenu popupMenu = new PopupMenu();

MenuItem mainFrameItem = new MenuItem("主界面");

ActionListener openMainFrameListener = new ActionListener()

{

@Override

public void actionPerformed(ActionEvent ae)

{

MainFrame.this.setVisible(true);

Java Swing开发,将程序最小化至系统托盘_☆时光☆_百度空间

Java Swing开发,将程序最小化至系统托盘_☆时光☆_百度空间

Java Swing开发,将程序最小化至系统托盘下面的函数是最小化至托盘的按钮的点击响应函数。private void minimizeButtonActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:if (SystemTray.isSupported()) // 判断系统是否支持系统托盘{SystemTray sysTray = SystemTray.getSystemTray(); // 获得系统托盘Image image = null;try {image = ImageIO.read(MainFrame.class.getResource("/res/icon.jpg")); // 载入图片,这里要写你的图标路径哦} catch (IOException e) {}// 创建弹出菜单PopupMenu popupMenu = new PopupMenu();MenuItem mainFrameItem = new MenuItem("主界面");ActionListener openMainFrameListener = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent ae) {MainFrame.this.setVisible(true); }};mainFrameItem.addActionListener(openMainFrameListener);MenuItem exitItem = new MenuItem("退出程序");exitItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (JOptionPane.showConfirmDialog(null, "确定退出系统?","询问",JOptionPane.YES_NO_OPTION) ==JOptionPane.YES_OPTION ) {System.exit(0);}}});popupMenu.add(mainFrameItem);popupMenu.add(exitItem);TrayIcon trayIcon = new TrayIcon(image, "seara", popupMenu);// 创建trayIcontrayIcon.addActionListener(openMainFrameListener);try {sysTray.add(trayIcon);} catch (Exception e) {}MainFrame.this.setVisible(false);}else{JOptionPane.showMessageDialog(MainFrame.this,"本系统不支持最小化至系统托盘!","通知",JOptionPane.OK_OPTION);}}

最小化到托盘

最小化到托盘

系统最小化到托盘

一、托盘简介

所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。

二、托盘编程相关函数

其实,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。

绘制图标以及确定图标所传送消息的函数只有一个,

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(

DWORD dwMessage,

PNOTIFYICONDATA pnid

);

这个函数负责向系统传递消息,以添加、修改或删除托盘区的图标。她的返回值是个布尔类型的。就是说,如果返回0才成功。

参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是NIM_MODIFY。参数pnid就是具体的和程序在托盘区的图标有关系的结构了。它的定义如下:

typedef struct _NOTIFYICONDATA {

DWORD cbSize;

HWND hWnd;

UINT uID;

UINT uFlags;

UINT uCallbackMessage;

HICON hIcon;

char szTip[64];

} NOTIFYICONDATA, *PNOTIFYICONDATA;

下面就对该结构各个参数进行刨析:

cbSize : 结构的长度,用“位”来做单位。一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。

qt 最小化 工作原理

qt 最小化 工作原理

qt 最小化工作原理

Qt最小化的工作原理是将窗口隐藏到任务栏或系统托盘中,以便在需要时可以快速恢复窗口。具体工作原理如下:

1. 当用户点击窗口的最小化按钮时,操作系统会发送一个最小化的信号给应用程序。

2. 应用程序收到最小化信号后,会调用Qt框架提供的最小化函数,将窗口隐藏到任务栏或系统托盘中。

3. 在Windows操作系统中,Qt会调用系统API将窗口最小化并发送一个最小化事件给窗口的事件循环。

4. 在Linux和Mac操作系统中,Qt会发送一个最小化事件给窗口的事件循环,然后由事件循环处理最小化操作。

5. 当用户需要恢复窗口时,可以通过点击任务栏上的应用程序图标或系统托盘上的图标来触发恢复操作。

6. 应用程序收到恢复信号后,会调用Qt框架提供的恢复函数,将窗口还原到之前的大小和位置。

Qt最小化的工作原理是通过操作系统提供的API将窗口隐藏,并在需要时通过用户操作触发恢复操作。

C# windows窗体实现最小化到托盘

C# windows窗体实现最小化到托盘

Window窗体应用中,有很多地方都会用的到,下面是我总结一个实例可以给大家分享分享,只供参考,如果有什么不对或欠缺的地方,请莫见怪.

(C#)实现最小化托盘需要一个控件,叫notifyIcon,引用这个控件之后,上面的图标需要用.ico格式的,如果需要使用右键菜单,可在此控件属性中的contextMenuStrip设置,当然前提是你要有这个contextMenustrip控件.

窗体页面:

代码实例:

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Test_tuopan

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

///<summary>

///最小化时发生

///</summary>

private void NormalToMinimized()

{

this.WindowState = FormWindowState.Minimized; //最小化时隐藏窗体

this.Visible = false; //是窗体不可见

this.notifyIcon1.Visible = true; //图标在任务栏区域可见

最小化到托盘

最小化到托盘

单击“最小化”按钮(标题栏的右边)将窗口缩小为任务栏上右边的图标,同时隐藏原窗体。单击或者右键托盘化的图标,可以重现原窗体。vb中有部分api可以实现将窗体最小化的功能,但是非常繁琐。这里有一个非常简单的办法:可以用微软封装好的控件来实现,不过该控件并不在VB安装目录中,需要找到VB的安装盘(不是安装以后的目录)的COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY目录,将Systray目录拷到硬盘上面并编译为ocx控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),然后在自己的VB程序中添加改控件(工程-部件-浏览)。最好把这个ocx放到C:\WINDOWS\system32。改控件的属性InTray属性用来设置是否显示在托盘中,True为显示在托盘,False为不显示。TrayIcon属性是在托盘中显示的图标式样。TrayTip属性是鼠标移到改控件上面显示的提示文字。如果要使程序最小化时显示到托盘,如下:Private Sub Form_Resize()If Me.WindowState = vbMinimized ThencSysTray1.InTray = TrueMe.Visible = FalseEnd IfEnd Sub点击托盘图标后让程序显示出来,如下:Private Sub cSysTray1_MouseDown(Button As Integer, Id As Long)Me.WindowState = vbNormalMe.Visible = TruecSysTray1.InTray = FalseMe.SetFocusEnd Sub

C++编程实现最小化窗口到桌面右下角图标的代码

C++编程实现最小化窗口到桌面右下角图标的代码

C++编程实现最小化窗口到桌面右下角图标的代码2009-8-12 13:00:00 信息来源:IT专家网 作者: 编辑人:: 阅读数:28 网友评论:0 条本文是一篇博客,主要介绍C++编程实现最小化窗口到桌面右下角图标的代码。 //*********************************************************** //函数名称 : ToTray //函数功能 : 最小化到系统托盘 //输入参数 : //输出参数 : //返回代码 : //*********************************************************** //本地注释 : //*********************************************************** void CBackupUIDlg::ToTray() { nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);// 结构的长度,用“位”来做单位。 nid.hWnd = this->m_hWnd;//消息传送的窗口句柄 nid.uID = IDR_MAINFRAME;//在工程中定义的图标ID nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); _tcscpy_s(nid.szTip,sizeof(nid.szTip)+1,_T("备份客户端"));//信息提示条为“备份客户端” Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标 ShowWindow(SW_HIDE);//隐藏主窗口 } //************************************************************** //函数名称 : onShowTask //函数功能 : 托盘事件回调函数 //输入参数 : //输出参数 : //返回代码 : //************************************************************** //本地注释 : //************************************************************** LRESULT CBackupUIDlg::onShowTask(WPARAM wParam,LPARAM lParam) { if(wParam!=IDR_MAINFRAME) return 1; switch(lParam) { case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭” { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; //载入事先定义的菜单 VERIFY(menu.LoadMenu(IDR_MENU_TRAY)); CMenu *pMenu = (CMenu *)(menu.GetSubMenu(0)); ASSERT(pMenu != NULL); //确定弹出式菜单的位置 pMenu->TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //资源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; } break; case WM_LBUTTONDBLCLK://双击左键的处理 { this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿 } break; } return 0; } /*********************************************/ /* 最小化到托盘后点击右键退出 */ /***********************

OUTLOOK 如何最小化后显示在系统托盘

OUTLOOK 如何最小化后显示在系统托盘

OUTLOOK 如何最小化后显示在系统托盘

OUTLOOK启动后最小化总是在任务栏上占一个位置,工作起来碍事,所以希望它能够最小化到托盘,以下方法可以帮你实现:对于outlook2007以前的版本,可以:

1.打开注册表:开始菜单-> 运行, 输入”regedit”并回车

2.打开HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Preferences 项目

3.建立一个DWord的值(双字节值),名称为”MinToTray”, 取值改成1

4.关闭注册表编辑器, 如果Outlook 2003运行中,关闭.

5.启动Outlook2003, 此时系统托盘区已经有一个Outlook2003的小图标了, 当你把Outlook2003最小化的时候, 它就会自己缩到托盘区了. Outlook2007实际上不需要修改注册表只要在任务栏右下角outlook 右键—最小化时影藏即可

VB6最小化到托盘

VB6最小化到托盘

怎样用VB6.0实现将窗体最小化到托盘区

悬赏分:50 - 解决时间:2006-8-11 15:09

怎样用VB6.0实现将窗体最小化到托盘区?

提问者:懒狗炸弹- 见习魔法师二级

最佳答案

忙了我一下午了!弄好了!

1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False

2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas

3、在Module1中写下如下代码:

Option Explicit

Public Const MAX_TOOLTIP As Integer = 64

Public Const NIF_ICON = &H2

Public Const NIF_MESSAGE = &H1

Public Const NIF_TIP = &H4

Public Const NIM_ADD = &H0

Public Const NIM_DELETE = &H2

Public Const WM_MOUSEMOVE = &H200

Public Const WM_LBUTTONDOWN = &H201

Public Const WM_LBUTTONUP = &H202

Public Const WM_LBUTTONDBLCLK = &H203

Public Const WM_RBUTTONDOWN = &H204

Public Const WM_RBUTTONUP = &H205

Public Const WM_RBUTTONDBLCLK = &H206

如何使程序最小化到系统托盘

如何使程序最小化到系统托盘

如何使程序最小化到系统托盘

VC编写的应用程序希望像qq,千千静听,暴风影音那样程序最小化时在系统托盘中显示而不是在任务栏中。如下:

1.在基于对话框的程序的头文件中添加成员变量NOTIFYICODATA m_nid

2.自定义消息函数OnShowTask

1)首先在头文件中定义 #define WM_SHOWTASK WM_USER+1

2)在头文件映射中在添加afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam)

3)在源文件中的消息映射队列中添加ON_MESSAGE (WM_SHOWTASK,OnShowTask)

4)在原文件中添加自定义消息函数定义:

LRESULT CMediaPlayerDialog::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(); // 声明一个弹出式菜单

menu.AppendMenu(MF_STRING, WM_DESTROY, "退出(&X)");

menu.TrackPopupMenu(TPM_LEFTALIGN,

lpoint->x ,lpoint->y, this);

PPS取消点击关闭键最小化到托盘

PPS取消点击关闭键最小化到托盘

PPS取消点击关闭键最小化到托盘

最近很多软件增加了一种功能,点击右上角的“关闭键”并不是关闭程序,而是最小化到托盘,那么我们该如何取消这个功能呢?

PPS取消点击关闭键最小化到托盘,实现点击关闭键直接退出程序:

打开PPS:/soft/93672.htm

接下来就是进入“设置”,这里小编教大家三种方法进入“设置”界面:

方法一:点击左上方的LOGO,在弹出的菜单中找到“设置”

方法二:右键点击鼠标,在弹出的菜单中找到“设置”

方法三:鼠标右键点击程序最小化图标,在弹出的菜单中找到“设置”

图文教程详见:PPS点播视频缓存地址

进入到设置界面后,切换到最后一个“其他”项,我们可以看到在“点击关闭按钮时”中选择了“最小化到托盘”

这时,我们应该选择至“退出”然后点击“应用”再点击“确定”

设置成功后,我们来试试,点击“关闭键”,这时候托盘中已经没有最小化的PPS图标了。

转载请注明出处:

将 VMware 最小化到系统托盘

将 VMware 最小化到系统托盘

将VMware 最小化到系统托盘

因为一直要用到虚拟机,每次最小化的时候,总是占用任务栏,很不爽,于是在网上搜索了一番,终于找到一个可以用的方法。

首先下载一个软件,叫做Trayconizer,最好把这个文件放在固定的目录下,比如我放在了C 盘下的Windows目录,

然后找到Vm的快捷方式,右键-》属性,在快捷方式选项卡里找到“目标”,将Trayconizer的具路径复制在前边,后边是Vm的路径,最好将Vm的路径加上双引号,Trayconizer和Vm的路径中间一定要有一个空格,如图:

这样每次使用这个快捷方式打开VM后,点击最小化时就会被放到系统托盘(win7 64bit成功)

mfc_最小化到托盘

mfc_最小化到托盘

mfc中将软件最小化到托盘

一、托盘简介

所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。其实,托盘区的编程很简单,下面简要阐述一下子喽^_^

二、托盘编程相关函数

其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。

绘制图标以及确定图标所传送消息的函数只有一个,那就是——————

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(

DWORD dwMessage,

PNOTIFYICONDATA pnid

);

这个函数呢,负责向系统传递消息,以添加、修改或删除托盘区的图标。她的返回值呢,是个布尔类型的。就是说,如果返回0,那就是成仁啦,非0才成功。

参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是

NIM_MODIFY。参数pnid就是具体的和程序在托盘区的图标有关系的结构了。它的定义如下:

typedef struct _NOTIFYICONDATA {

DWORD cbSize;

HWND hWnd;

UINT uID;

UINT uFlags;

UINT uCallbackMessage;

HICON hIcon;

char szTip[64];

} NOTIFYICONDATA, *PNOTIFYICONDATA;

c#编写最小化到托盘程序的右键菜单

c#编写最小化到托盘程序的右键菜单

c#编写最小化到托盘程序的右键菜单

c#最小化到托盘右键菜单要怎么写呢。需要用什么控件?

拖入一个ContextMenuStrip(右键菜单)到窗体上

点击该控件,为它添加一个项

再为该项添加单击事件(MenuItemMin_Click,双击项或者在事件中找到单击事件双击)

拖入一个NotifyIcon(托盘),为控件选择一个图标(.icon)

为控件添加双击事件(notifyIcon1_MouseDoubleClick,单击事件也一样)

之后如下代码

public partial class TestForm : Form

{

public TestForm()

{

InitializeComponent();

//给窗体(你想要弹出右键菜单的控件)加上右键菜单,也可以在属性上面直接选择绑定

this.ContextMenuStrip = contextMenuStrip1;

}

//右键菜单中“最小化到托盘”项单击事件

private void MenuItemMin_Click(object sender, EventArgs e) {

//点击右键菜单最小化按钮时最小化,之后会触发TestForm_SizeChanged

this.WindowState = FormWindowState.Minimized;

}

//窗体大小改变事件

private void TestForm_SizeChanged(object sender, EventArgs e)

{

//窗体状态为最小化时

if (this.WindowState == FormWindowState.Minimized)

c++win32下窗口的最小化到托盘以及还原

c++win32下窗口的最小化到托盘以及还原

c++win32下窗⼝的最⼩化到托盘以及还原

框架是⽤visual studio创建的win32控制台模板,然后⾃⼰添加最⼩化及还原部分代码。

需要额外包含的头⽂件:

#include <shellapi.h>

#include <WinUser.h>

⽅式是在托盘区创建图标,隐藏主窗⼝。

托盘创建图标:

void ToTray(HWND hWnd)

{

NOTIFYICONDATA nid;

nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd = hWnd;

nid.uID = IDR_MAINFRAME;

nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

nid.uCallbackMessage = WM_TO_TRAY;//⾃定义的消息处理托盘图标事件

nid.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_SMALL));

wcscpy_s(nid.szTip, _T("⾃定义程序名"));//⿏标放在托盘图标上时显⽰的⽂字

Shell_NotifyIcon(NIM_ADD, &nid);//在托盘区添加图标

}

关闭软件时需要销毁托盘区的图标,不然⿏标划过才会消失:

void DeleteTray(HWND hWnd)

{

NOTIFYICONDATA nid;

nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中(就是为应用程序在桌面右下角添加一个图标,和QQ类似)有位老兄说我乱贴,可能这位老兄已经看得眼花缭乱了,Shell_NotifyIcon 是一个Windows SDK的一个函数,只要你在windows下编程,不管你是BCB、VC、VB,都可以调用它来实现托盘图标,只是调用方法不同罢了。

常常能见到一些优秀的软件在运行后会将其应用程序图标加入到系统托盘中。如果能将自己编写的应用程序的图标也加入到系统托盘中,将会使你的程序显得很有专业水准。其实这并不困难,与系统托盘通信的函数只有一个:

Shell_NotifyIcon (UINT message, NOTIFYICONDATA &m_nid);

首先看一下该函数的两个参数。

第一个参数message可以取以下值:NIM_ADD 向托盘中加入一个图标; NIM_MODIFY 修改托盘中的图标;NIM_DELETE 从托盘中删除一个图标;

第二个参数m_nid是NOTIFYICONDATA结构的一个引用。该结构的原型如下:

typedef struct _NOTIFYICONDATA

{

DWORD cbSize;// 结构的大小,必须在程序中给出

HWND hWnd; //是你程序中将要接收托盘消息的窗口句柄

UINT uID; // 应用程序中定义的托盘图标ID,此参数用作标识

UINT uFlags; //设置属性,低三位有意义,0--7,如下:

//第一位//#define NIF_MESSAGE 0x1 // uCallbackMessage参数有效

//第二位//#define NIF_ICON 0x2 // hIcon参数有效

//第三位//#define NIF_TIP 0x4 // szTip参数有效UINT uCallbackMessage; // 自定义的消息ID值,一定不要与以有的消息ID相重。

HICON hIcon; //显示在系统托盘上的Icon的句柄,可以为系统的IDI_WINLOGO等

CHAR szTip[64]; // 用于图标显示的提示字符串

} NOTIFYICONDATA;

为了接收到来自托盘的通知消息你可以将uCallbackMessage设定为你所定义的消息ID值,同时设定NIF_MESSAGE标志。这样当用户在你的托盘图标上移动或按下鼠标时,Windows将发出消息:该消息的messageID是你在uCallbackMessage中定义的值;wParam是你定义的uID值;而lParam是鼠标事件(如WM_LBUTTONDOWN),这样你的应用程序就能响应该事件了。因此,为了将自己的应用程序加入到系统托盘中,首先得建立一处理托盘通知消息的窗口对象,然后将窗口对象与你自己的托盘通知消息联系起来并建立相应的托盘通知消息映射机制,以便你的窗口对象能处理相应的事件。可以看到结构体NOTIFYICONDATA中,其成员变量hWnd,uID,uFlags均用于在窗口对象与你自己的托盘通知消息之间建立联系,而成员变量uCallbackMessage则必须是对应于你的窗口对象的托盘通知消息ID值。于是要完成的工作有:

(1)建立一处理托盘通知消息的窗口对象;

(2)建立一结构体NOTIFYICONDATA变量,并给变量的相应域赋值以在托盘通知消息与窗口对象之间建立联系;

(3)建立相应的托盘通知消息映射机制;

(4)调用Shell_NotifyIcon函数以在系统托盘中加入、修改或删除图标;

(5)当然别忘了在你的窗口对象中编写相应的事件响应函数。

NOTIFYICONDATA NotifyIcon;

#define WM_NC (WM_USER+0x101)

// 实现

protected:

afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM IParam);

BEGIN_MESSAGE_MAP(CDiningManageDlg, CDialog)

ON_MESSAGE(WM_NC,OnNotifyIcon)

END_MESSAGE_MAP()

LRESULT CDiningManageDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)

{

if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))

{

ModifyStyleEx(0,WS_EX_TOPMOST);

ShowWindow(SW_SHOW);

}

return 0;

}

NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);

NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDI_ICON_Notify);//IDR_MAINFRAME NotifyIcon.hWnd=m_hWnd;

lstrcpy(NotifyIcon.szTip,L"接口程序");

NotifyIcon.uCallbackMessage = WM_NC;

NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;

Shell_NotifyIcon(NIM_ADD,&NotifyIcon);

ShowWindow(SW_HIDE);

Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);

相关文档
最新文档