c最小化托盘
VC制作最小化托盘

VC++制作一个最小化最小托盘的8步骤Introduction这篇文章解析了Shell_NotifyIcon这个函数用法--用来建立你自己的应用程序的系统托盘图标.这篇文章给了基本的缩小到托盘的操作过程并让你从中了解.这篇文章提供8个简单的步骤让你成功的实现在你的程序中建立系统托盘图标.源代码提供了一个基于对话框的演示程序.Tray Icons为了用托盘图标你需要用一个shell函数:)BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );ThedwMessage可选的参数包括theNIM_ADD,NIM_DELETE and NIM_MODIFY功能分别是添加删除以及修改图标于系统图标.PNOTIFYICONDATA结构包括这些系统需要处理的任务图标状态区域消息等信息.typedef struct _NOTIFYICONDATA {DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;#if (_WIN32_IE < 0x0500)TCHAR szTip[64];#elseTCHAR szTip[128];#endif #if (_WIN32_IE >= 0x0500)DWORD dwState;DWORD dwStateMask;TCHAR szInfo[256];union {UINT uTimeout;UINT uVersion;} DUMMYUNIONNAME;TCHAR szInfoTitle[64];DWORD dwInfoFlags;#endif #if (_WIN32_IE >= 0x600)GUID guidItem;#endif} NOTIFYICONDATA, *PNOTIFYICONDATA;*Note: 更完全的信息可以去参考MSDNCreating the ApplicationCreate a new VC++ dialog based project and call it TrayMin.创建一个名叫TrayMin的基于对话框的VC++工程Step: 1自定义消息于TrayMinDlg.h 头文件.#define WM_TRAY_MESSAGE (WM_USER + 1)TheWM_USER常量用来帮助用户定义自己的消息被用来建立个人的窗口类, 定义时通常用这种格式WM_USER+X, 这里X 是一个整形变量.*更详细的看MSDNStep: 2现在在Now add the DECLARE_MESSAGE_MAP() 之前添加下面的用户函数吧(TrayMinDlg.h file)afx_msg void OnTrayNotify(WPARAM wParam, LPARAM lParam);当添加一个图标到托盘时这有一个图标的回调消息,注意到NOTIFYICONDATA结构中有uCallbackMessage成员是回调消息识别的关键,它会被传给NIM_ADD(我们之后将会见到更详细的)。
最小化到托盘

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

系统最小化到托盘一、托盘简介所谓的“托盘”,在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) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
大多数情况下是this->m_hWnd。
uID : 在工程中定义的图标IDuFlags : 这个成员标志着其他哪些成员的数据是有效的,分别为NIF_ICON, NIF_MESSAGE, NIF_TIP,分别代表着数据有效的成员是hIcon, uCallbackMessage, szTip。
Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘

Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘学习Delphi时,使用了第3方控件CoolTrayIcon。
CoolTrayIcon 的功能很强大,能够将程序添加进托盘,省去了我们再编写代码来实现托盘。
但是在看搜CoolTrayIcon的时候,发现好多朋友在求如何让程序在启动就最小化多托盘的方法。
但是貌似都不曾成功过。
笔者摸索了一下,成功实现了。
找原因首先我们来看一下CoolTrayIcon的功能函数:根据CoolTrayIcon的使用实例来看,CoolTrayIcon提供了函数HideMainForm()。
好吧我们如果在FromCreat里面如果调用该函数会发现没有任何反应。
为什么呢?我们接着跟踪这个函数看一下它的声明:procedure TCoolTrayIcon.HideMainForm;beginif Owner is T WinControl then // Owner might be of type TServiceif Appl ication.MainForm <> nil thenbegin// Hide the form itself (and t hus any child windows)Application.MainForm.Visible := False;{ H ide application's TASKBAR icon (not the tray icon). Do this AFTE Rthe main form is hidden, or any child windows will redisplay th etaskbar icon if they are visible. }HideTaskbarIcon;end;end;好吧,我们看到这里应该知道了吧。
如果你还不知道,可以对它设置断点调试,你就会发现函数声明的语句根本就没有进去。
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; //图标在任务栏区域可见this.ShowInTaskbar = false; //是否在任务栏显示窗体 }///<summary>///点击托盘时窗体恢复正常///</summary>private void MinimizedToNormal(){this.Visible = true; //窗体可见this.WindowState = FormWindowState.Normal; //窗体状态为正常notifyIcon1.Visible = true; //托盘图标可见}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (DialogResult.Yes == MessageBox.Show("确定要关闭吗?", "提示", MessageBoxButtons.YesNo, rmation)){e.Cancel = false;}else{e.Cancel = true;}}///<summary>///窗体变化时触发的事件///</summary>///<param name="sender"></param>///<param name="e"></param>private void Form1_Resize(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){NormalToMinimized();}}///<summary>///点击托盘图标时,显示窗体///</summary>///<param name="sender"></param>///<param name="e"></param>private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) {//点击鼠标左键if (e.Button == MouseButtons.Left){if (this.WindowState == FormWindowState.Minimized){//显示窗体MinimizedToNormal();}else{//最小化到托盘NormalToMinimized();}}}private void显示ToolStripMenuItem_Click(object sender, EventArgs e) {//显示窗体MinimizedToNormal();}private void退出ToolStripMenuItem_Click(object sender, EventArgs e) {this.Close();}}}。
MFC 对话框系统托盘详细步骤

MFC中将窗口最小化至系统托盘1.在对话框类中声明NOTIFYICONDATA变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2.在resource.h文件中自定义消息#define WM_SHOWTASK 10013.在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog)...ON_MESSAGE(WM_SHOWTASK,onShowTask)...END_MESSAGE_MAP()5.定义消息响应函数LRESULT CCamProjDlg::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;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); // 增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
MFC对话框系统托盘详细步骤(精)

MFC 中将窗口最小化至系统托盘1. 在对话框类中声明 NOTIFYICONDATA 变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2. 在 resource.h 文件中自定义消息#define WM_SHOWTASK 10013. 在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam; ...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog...ON_MESSAGE(WM_SHOWTASK,onShowTask...END_MESSAGE_MAP(5. 定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam { // wParam接收的是图标的 ID ,而 lParam 接收的是鼠标的行为if( wParam != IDR_MAINFRAMEreturn 1;switch(lParam{case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个 " 关闭 " { LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint; // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(; // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭 "; // 增加菜单项 " 关闭 " ,点击则发送消息 WM_DESTROY给主窗口(已隐藏 ,将程序结束。
C WinForm 最小化或关闭时隐藏到系统托盘

C#WinForm-最小化或关闭时隐藏到系统托盘STEP1、添加托盘图标控件NotifyIcon(直接从工具箱中拖动添加即可)STEP2、添加(重写)窗口尺寸变动函数Form1_Resizeprivate void Form1_Resize(object sender,EventArgs e){if(this.WindowState==FormWindowState.Minimized)//最小化到系统托盘{NotifyIcon1.Visible=true;//显示托盘图标this.Hide();//隐藏窗口}}STEP3、添加(重写)关闭窗口事件private void Form1_FormClosing(object sender,FormClosingEventArgs e){//注意判断关闭事件Reason来源于窗体按钮,否则用菜单退出时无法退出!if(e.CloseReason==erClosing){e.Cancel=true;//取消"关闭窗口"事件this.WindowState=FormWindowState.Minimized;//使关闭时窗口向右下角缩小的效果NotifyIcon1.Visible=true;this.Hide();return;}}STEP4、添加双击托盘图标事件(双击显示窗口)private void NotifyIcon1_MouseDoubleClick(object sender,MouseEventArgs e) {NotifyIcon1.Visible=false;this.Show();WindowState=FormWindowState.Normal;this.Focus();}STEP5、添加托盘图标的右键菜单(具体代码略)"退出"菜单:this.Close();"显示窗口"菜单:参考STEP4PS:解决了设置“关闭时隐藏到系统托盘”时,点击“退出”菜单也无法退出的问题。
C++编程实现最小化窗口到桌面右下角图标的代码

HMENU hmenu=menu.Detach();
menu.DestroyMenu(); delete lpoint;
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
_tcscpy_s(nid.szTip,sizeof(nid.szTip)+1,_T("备份客户端"));//信息提示条为“备份客户端”
//本地注释 :
//***********************************************************
void CBackupUIDlg::ToTray()
{
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);// 结构的长度,用“位”来做单位。
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口
}
//**************************************************************
}
break;
}
return 0;
}
/*********************************************/
托盘显示应用程序

C# winForm程序开机启动和托盘显示这段时间一直在学习C#,看了书然后又在网上看了N多大神些的blog,然后自己学着做了一个像QQ托盘图标那样的小功能的Demo:(1)、在窗口上点击关闭按钮或者最小化时将托盘显示;(2)、双击托盘图标显示窗口;(3)、右键点击托盘图标提供三个菜单选项,“退出”、“隐藏”、“显示”;(4)、程序可以设置开机启动,隐藏任务栏显示。
就这四个小功能。
1、建一个WinForm程序—TestIconForm,将其属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示;将MaximizeBox属性设置为false,屏蔽掉最大化按钮;把StartPosition属性改为CerternScreen,这样程序运行后,窗口将会居中显示。
2、在工具栏中的公共控件里,拖入NotifyIcon控件—testNotifyIcon,这个是程序运行任务栏右侧通知区域图标显示控件。
3、在工具栏中的菜单和工具栏里,拖入ContextMenuStrip—testContextMenuStrip,这个控件是右击时关联菜单。
4、右键testNotifyIcon选择属性,将其属性ContextMenuStrip改加为testContextMenuStrip,这个时候1和2两个步骤的两个控件就关联了,用于完成上面(3)功能。
5、右键testContextMenuStrip选择属性,进入Items,然后点击“添加”,这里添加三个菜单选项:exitMenuItem、hideMenuItem、showMenuItem,同时分别将其Text属性改为:退出、隐藏和显示。
准备工作就这些,下面是大致代码:1)、双击TestIconForm,即添加Load事件然后代码private void Form1_Load(object sender, EventArgs e){testNotifyIcon.Icon = new Icon("e:\\MyPicture\\testIcon.ico");//取得程序路径string startup = Application.ExecutablePath;//class Micosoft.Win32.RegistryKey. 表示Window注册表中项级节点,此类是注册表装RegistryKey rKey = Registry.LocalMachine;RegistryKey autoRun =rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");try{autoRun.SetValue("BookServer", startup);rKey.Close();}catch (Exception exp){MessageBox.Show(exp.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);}}添加Form_Closing,SizeChanged事件代码private void Form1_FormClosing(object sender, FormClosingEventArgs e) //关闭按钮事件{e.Cancel = true;this.Hide();}private void Form1_SizeChanged(object sender, EventArgs e) //最小化事件按钮{this.Hide();}2)、给testNotifyIcon添加MouseDoubleClick事件代码private void testNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) // 左键双击,显示{if (e.Button == MouseButtons.Left){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}}3)、进入TestIconForm单击testContextMenuStrip,然后可以看到“退出”、“隐藏”、“显示”,分别双击,添加相应的事件代码private void exitMenuItem_Click(object sender, EventArgs e){if (MessageBox.Show("你确定要退出终端服务程序吗?", "确认", MessageBoxButtons.OKCancel,MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){testNotifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}}private void showMenuItem_Click(object sender, EventArgs e) {this.Hide();}private void hideMenuItem_Click(object sender, EventArgs e) {this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}。
VC++托盘编程

托盘编程一、托盘简介所谓的“托盘”,在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;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。
一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
自然了,大多数情况下是this->m_hWnd喽。
c#程序最小化到任务栏区

程序最小化到任务栏区1、如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false;2、如果想让程序启动时就最小化,请设置窗体的属性WindowState设置为Minimized。
(Minimized 最小化,Normal正常启动,Maximized最大化)3、拉一个NotifyIcon控件notifyIcon,为控件notifyIcon的属性Icon添加一个icon图标。
4、可以为NotifyIcon加一个ContextMenuStrip右键菜单。
5、本例子禁用了窗体最大化按钮。
(设置窗体的属性MaximizeBox的属性为false)#region处理窗体的显示隐藏关闭方法privatevoid ExitMainForm(){if (MessageBox.Show("您确定要退出服务程序吗?", "确¨认退出?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){this.notifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}}privatevoid HideMainForm(){this.Hide();}privatevoid ShowMainForm(){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}#endregion#region窗体的窗体的显示隐藏关闭事件privatevoid menu_Show_Click(object sender, EventArgs e){ShowMainForm();}privatevoid menu_Hide_Click(object sender, EventArgs e){HideMainForm();}privatevoid menu_Exit_Click(object sender, EventArgs e){ExitMainForm();}#endregion//单击显示窗体privatevoid notifyIcon_DoubleClick(object sender, EventArgs e){if (this.WindowState == FormWindowState.Normal){this.WindowState = FormWindowState.Minimized;HideMainForm();}elseif (this.WindowState == FormWindowState.Minimized){ShowMainForm();}}#region点最小化按钮时最小化到托盘privatevoid OPCServerClient_SizeChanged(object sender, EventArgs e) {if (this.WindowState == FormWindowState.Minimized){HideMainForm();}}#endregion#region窗体关闭时最小化到托盘//退出确认privatevoid OPCServerClient_FormClosing(object sender, FormClosingEventArgs e){e.Cancel = true;HideMainForm();}#endregion设定ContextMenuStrip绑定到notifyIcon。
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;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。
一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
自然了,大多数情况下是this->m_hWnd喽。
C++最小化托盘

VC++中把一个对话框最小化到托盘一、托盘简介所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。
在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
二、托盘编程相关函数把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。
绘制图标以及确定图标所传送消息的函数只有一个: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ); 这个函数,负责向系统传递消息,以添加、修改或删除托盘区的图标。
参数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) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
大多数情况下是this->m_hWnd。
uID : 在工程中定义的图标ID uFlags : 这个成员标志着其他哪些成员的数据是有效的,分别为NIF_ICON, NIF_MESSAGE, NIF_TIP,分别代表着数据有效的成员是hIcon, uCallbackMessage, szTip。
VC最小化到托盘程序的编写

VC最小化到托盘程序的编写在实际操作电脑的过程中,我们常常可以看到一些应用程序可以最小化到桌面右下角的托盘中显示,如一些杀毒软件等开机就显示在托盘中,或是我们常用的QQ等聊天工具,都可以最小化在托盘中,如图。
图应用程序的托盘显示在图-1中,可以看到第一个服务器样式的图标,那个就是我编写的服务器程序最小化在托盘中的显示。
其实很简单,只要在程序中加几行代码就可以了。
我主要就MFC中基于Dialog对话框的程序作一下简单的介绍。
以下是基本步骤:1、首先建立一个基于对话框的MFC程序;2、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉;3、在自己的Dialog头文件中定义一个变量NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN;4、添加消息响应函数OnInitDialog(),并在该函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。
//---------------------------托盘显示---------------------------------//m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);m_nid.hWnd = this->m_hWnd;m_nid.uID = IDR_MAINFRAME;m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRA ME));strcpy(m_nid.szTip, "服务器程序"); // 信息提示条"服务器程序"Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标这时候编译,会报WM_SHOWTASK的错,因为该消息要自己定义。
C++托盘

C++托盘背景需求:1、MFC 对话框最小化时,只显示系统右下角托盘图标。
2、双击托盘,对话框还原。
3、右键点击托盘,弹出“关闭”菜单,可关闭对话框。
实现步骤:1、创建MFC 对话框程序(本例程序名为TaskbarIcon ),属性中设置“MinimizeBox”为true 。
2、定义自定义消息宏。
1 #define NOTIFY_SHOW WM_USER+25003、OnSysCommand (系统消息响应函数)添加对话框最小化执行代码。
01 void CTaskbarIconDlg::OnSysCommand(UINT nID, LPARAM lParam) 02 {03 if (SC_MINIMIZE == nID)04 {05 NOTIFYICONDATA nid;06 nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);07 nid.hWnd = this->m_hWnd;08 nid.uID = IDR_MAINFRAME;09 nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ; 10 nid.uCallbackMessage = NOTIFY_SHOW;//自定义的消息名称11 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));12 wcscpy_s(nid.szTip, _T("图标测试"));//信息提示条1314 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标15 ShowWindow(SW_HIDE);//隐藏主窗口16 return;17 }1819 //...系统自带代码20 }4、托盘自定义消息响应01 BEGIN_MESSAGE_MAP(CTaskbarIconDlg, CDialog)02 //...省略其他消息映射0304 ON_MESSAGE(NOTIFY_SHOW, OnTrayIcon)05 //}}AFX_MSG_MAP06 END_MESSAGE_MAP()0708 afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam); 0910 LRESULT CTaskbarIconDlg::OnTrayIcon(WPARAM wParam, LPARAM lParam) 11 {12 if (wParam != IDR_MAINFRAME)13 {14 return 1;15 }1617 switch(lParam)18 {19 case WM_RBUTTONUP:20 {21 //右键起来时弹出快捷菜单,这里只有一个“关闭” 2223 //声明一个弹出式菜单24 //增加菜单项“关闭”,点击则发送消息WM_CLOSE 给主窗口(已25 //隐藏),将程序结束。
C#最小化到托盘

if (this.WindowState == FormWindowState.Minimized)
{
this.Show();
this.WindowState = FormWindowState.Normal ;
//上面一行是主窗体InitializeComponent()方法中需要添加的引用
private void Form1_SizeChanged(object sender, EventArgs e)
{
if(this.WindowState == FormWindowState.Minimized)
notifyIcon1.Visible = ቤተ መጻሕፍቲ ባይዱalse;
this.ShowInTaskbar = true;
}
}
===========================
{
this.ShowInTaskbar = false; //不显示在系统任务栏
notifyIcon.Visible = true; //托盘图标可见
}
4、实现NotifyIcon控件的DoubleClick事件,代码如下:
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
1.设置WinForm窗体属性showinTask=false
2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标。
3.添加窗体最小化事件(首先需要添加事件引用):
代码如下:
this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
C#windows 系统托盘

C#中如何实现窗体最小化系统托盘1.打开的工具箱,然后选择NotifyIcon,拖到Form上,在属性中Icon中设置图象2.添加一个ContextMenu,输入需要的选择项在NotifyIcon中的ContextMenu属性中;可以设置刚添加的ContextMenu点托盘上的图标就可以显示选择项。
using System;using System.Drawing;using System.Collections;using ponentModel;using System.Windows.Forms;using System.Data;using ;using System.IO;namespace SendSMS{public class Form1 : System.Windows.Forms.Form{private System.Windows.Forms.NotifyIcon notifyIcon1;private System.Windows.Forms.ContextMenu contextMenu1;private System.Windows.Forms.MenuItem menuItem1;private System.Windows.Forms.MenuItem menuItem2;private System.Windows.Forms.MenuItem menuItem3;private System.Windows.Forms.Timer timer1;private ponentModel.IContainer components;startSend sSend = new startSend();public Form1(){InitializeComponent();}#regionprotected override void Dispose( bool disposing ){if( disposing ){if (components != null){components.Dispose();}}base.Dispose( disposing );}#endregion#region Windows Form 設計工具產生的程式碼/// <summary>/// 此為設計工具支援所必須的方法- 請勿使用程式碼編輯器修改/// 這個方法的內容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)原理
程序实现:最小化时隐藏至托盘,双击显示窗口,右键弹出快捷菜单“退出”并添加了响应函数。
1、托盘化的原理:首先要将窗口隐藏,然后在右下角托盘中绘制图标。
2、恢复的原理:将窗口显示,再将托盘中的图片删除。
(二)总体程序实现
1、首先建立一个基于对话框的MFC程序"CTrayDlg"。
然后在TrayDlg.h文件里加入自定义消息WM_SHOWTASK:
#define WM_SHOWTASK (WM_USER + 0x100)//一般数值大于
100//{{AFX_MSG(CTrayDlg)
afx_msg LRESULT OnShowTask(WPARAM
wParam,LPARAMlParam);//}}AFX_MSG
DECLARE_MESSAGE_MAP()
2、在TrayDlg.cpp文件里加入如下代码:
BEGIN_MESSAGE_MAP(CTrayDlg, CDialog)
//{{AFX_MSG_MAP(CTrayDlg)
中间加入消息声明:
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、在CTrayDlg的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应:
if(nID==SC_MINIMIZE)
ToTray();//最小化到托盘的函数
(三)具体函数内容
1、最小化到托盘函数
TrayDlg.h中添加函数声明:
voidToTray();
TrayDlg.cpp中定义函数体:
voidCTrayDlg::ToTray()
{
NOTIFYICONDATAnid; //NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,
//它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。
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;//应用程序定义的消息ID号,此消息传递给hWnd
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRA ME));//图标的句柄
strcpy(nid.szTip,"我的托盘我作主");//鼠标停留在图标上显示的提示信息Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标de函数,函数说明见文章附录
ShowWindow(SW_HIDE);//隐藏主窗口
}
2、恢复界面函数
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
LRESULT CTrayDlg::OnShowTask(WPARAM wParam,LPARAMlParam){
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,"退出");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
deletelpoint;
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口DeleteTray();
}
break;
default:
break;
}
return 0;
}
3、删除托盘图标函数
在TrayDlg.h文件中添加函数DeleteTray()声明:voidDeleteTray();
cpp中其函数体为:
voidCTrayDlg::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_MAINFRA ME));
strcpy(nid.szTip,"程序名称"); //信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盘区删除图标
}
附录:
Shell_NotifyIcon:
//原型WINSHELLAPI BOOL WINAPI
Shell_NotifyIcon( DWORDdwMessage,PNOTIFYICONDATApnid);
//Pnid是上面的NOTIFYICONDATA结构的指针。
dwMessage是被传递的消息,可以是以下消息之一:
//NIM_ADD:增加图标;NIM_DELETE:删除图标;NIM_MODIFY:修改图标。