VC++单文档程序最小化到托盘+自定义消息

合集下载

C#WinForm窗口最小化到系统托盘

C#WinForm窗口最小化到系统托盘

C#WinForm窗⼝最⼩化到系统托盘private void notifyIcon1_Click(object sender, EventArgs e){this.Visible = true;this.WindowState = FormWindowState.Normal;this.notifyIcon1.Visible = false;}主窗体中拖⼊⼀个ContextMenu控件NicontextMenu,点中控件,在上下⽂菜单中添加菜单,notifyIcon1的ContextMenu⾏为中选中NicontextMenu 作为上下⽂菜单。

复制代码代码如下:this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(ponents);this.NicontextMenu = new System.Windows.Forms.ContextMenu();this.menuItem_Hide = new System.Windows.Forms.MenuItem();this.menuItem_Show = new System.Windows.Forms.MenuItem();this.menuItem_Aubot = new System.Windows.Forms.MenuItem();this.menuItem_Exit = new System.Windows.Forms.MenuItem();this.notifyIcon1.ContextMenu = this.NicontextMenu;this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject( "NotifyIcon.Icon ")));this.notifyIcon1.Text = " ";this.notifyIcon1.Visible = true;this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);this.notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);this.NicontextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[]{this.menuItem_Hide,this.menuItem_Show,this.menuItem_Aubot,this.menuItem_Exit});//// menuItem_Hide//this.menuItem_Hide.Index = 0;this.menuItem_Hide.Text = "隐藏 ";this.menuItem_Hide.Click += new System.EventHandler(this.menuItem_Hide_Click);//// menuItem_Show//this.menuItem_Show.Index = 1;this.menuItem_Show.Text = "显⽰ ";this.menuItem_Show.Click += new System.EventHandler(this.menuItem_Show_Click);//// menuItem_Aubot//this.menuItem_Aubot.Index = 2;this.menuItem_Aubot.Text = "关于 ";this.menuItem_Aubot.Click += new System.EventHandler(this.menuItem_Aubot_Click);//// menuItem_Exit//this.menuItem_Exit.Index = 3;this.menuItem_Exit.Text = "退出 ";this.menuItem_Exit.Click += new System.EventHandler(this.menuItem_Exit_Click);protected override void OnClosing(CancelEventArgs e){this.ShowInTaskbar = false;this.WindowState = FormWindowState.Minimized;e.Cancel = true;}protected override void OnClosing(CancelEventArgs e){//this.ShowInTaskbar = false;this.WindowState = FormWindowState.Minimized;e.Cancel = true;}private void CloseCtiServer(){timer.Enabled = false;DJ160API.DisableCard();this.NotifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}private void HideCtiServer(){this.Hide();}private void ShowCtiServer(){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}private void CtiManiForm_Closing(object sender, ponentModel.CancelEventArgs e) {this.CloseCtiServer();}private void menuItem_Show_Click(object sender, System.EventArgs e){this.ShowCtiServer();}private void menuItem_Aubot_Click(object sender, System.EventArgs e){}private void menuItem_Exit_Click(object sender, System.EventArgs e){this.CloseCtiServer();}private void menuItem_Hide_Click(object sender, System.EventArgs e){this.HideCtiServer();}private void CtiManiForm_SizeChanged(object sender, System.EventArgs e){if(this.WindowState == FormWindowState.Minimized){this.HideCtiServer();}}private void notifyIcon1_DoubleClick(object sender,System.EventArgs e){this.ShowCtiServer();}。

C#编写的winform程序的托盘功能

C#编写的winform程序的托盘功能

C#编写的winform程序的托盘功能基本上⼤部分的桌⾯程序都有托盘功能,⽐如说QQ:当你单机QQ程序窗体的最⼩化按钮时,窗体会消失,并且单击电脑右下⾓的QQ图标时,QQ的窗体重新显现……在这⾥介绍下我们⾃⼰编写的winform程序怎么实现托盘功能。

在System.Windows.Forms命名空间下的封闭类 NotifyIcon可以帮我们轻松实现托盘功能。

(程序集 System.Windows.Forms.dll)在窗体的加载事件的处理⽅法中我们添加⼀下代码:NotifyIcon MyNotifyIcon = new NotifyIcon();//实例化MyNotifyIcon.Visible = true;//可见性MyNotifyIcon.Text = "我的托盘程序";//⿏标放在托盘时显⽰的⽂字MyNotifyIcon.ShowBalloonTip(1000);//托盘⽓泡的显现时间MyNotifyIcon.BalloonTipText = "我的托盘程序";//⽓泡显⽰的⽂字MyNotifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath);//托盘的外观(系统)//⾃定义托盘外观//Icon i = new Icon("FileName");//MyNotifyIcon.Icon = i;MyNotifyIcon.MouseDoubleClick += MyNotifyIcon_MouseDoubleClick;//托盘的⿏标窗机时间注册⽅法然后我们编写托盘双击的时候执⾏的⽅法void MyNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e){this.Show(); // 窗体显现this.WindowState = FormWindowState.Normal; //窗体回复正常⼤⼩}然后在给窗体的⼤⼩改变事件注册⼀个⽅法this.Resize += Form1_Resize;Form1_Resize()⽅法内容://单机窗体最⼩化时窗体隐藏void Form1_Resize(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.Hide();}}以上内容简单⽅便的实现了Winform的托盘功能。

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;this.Visible = false;this.notifyIconCMPC.Visible = true;this.myTimer.Enabled = false;//this.Hide();//设置⽓球状⼯具提⽰显⽰的时间为10秒this.notifyIconCMPC.ShowBalloonTip(30);}#endregion#region 重写WndProc屏蔽掉关闭按钮protected override void WndProc(ref Message m){const int WM_SYSCOMMAND = 0x0112;const int SC_CLOSE = 0xF060;if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE){this.Visible = false;return;}base.WndProc(ref m);}#endregionprivate void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){if (this.WindowState == FormWindowState.Minimized || this.Visible == false){this.normalForm();}else{minForm();}}public partial class MainForm : Form{FormWindowState fws = FormWindowState.Normal;public MainForm(){InitializeComponent();this.SizeChanged += new EventHandler(MainForm_SizeChanged);this.notifyIcon1.DoubleClick += new EventHandler(notifyIcon1_DoubleClick);this.notifyIcon1.Icon = new Icon("Virgo.ico");this.notifyIcon1.Visible = false;}void MainForm_SizeChanged(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = false;this.notifyIcon1.Visible = true;}else{fws = this.WindowState;}}void notifyIcon1_DoubleClick(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true;this.notifyIcon1.Visible = false;this.WindowState = fws;}}}。

程序最小化到托盘

程序最小化到托盘

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相重。

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能

C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能C#开发WinForm程序如何实现简单的”最小化“到系统托盘功能1、了解NotifyIcon控件NotifyIcon是一个比较特殊的组件,其特殊之处是既可以把它归类到控件中,也可以把它归类到组件中。

这是因为将其拖放到设计窗体后,我们并不能马上看到它的界面(像组件),而是在运行时才能看到它(像控件)。

通知区域中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。

这些进程不会具有自己的用户界面。

NotifyIcon类提供了编写此功能的方法。

Icon属性定义显示在通知区域中的图标。

图标的弹出菜单由ContextMenu 属性确定。

Text 属性分配工具提示文本。

要在通知区域中显示图标,必须将Visible属性设置为true。

2、拖放一个NotifyIcon控件主要设置的是该控件的Icon属性,Visible属性设置为False。

3、编写窗体的SizeChanged事件if (this.WindowState == FormWindowState.Minimized) //判断是否最小化{this.ShowInTaskbar = false; //不显示在系统任务栏binzhounotifyIcon.Visible = true; //托盘图标可见,其中binzhounotifyIcon为上述notifyicon控件的ID}4、编写NotifyIcon控件的DoubleClick事件该事件完成的是当双击系统托盘的缩略图时还原系统if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true; //显示在系统任务栏this.WindowState = FormWindowState.Normal; //还原窗体binzhounotifyIcon.Visible = false; //托盘图标隐藏}至此简单的系统托盘功能就实现了。

VC制作最小化托盘

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(我们之后将会见到更详细的)。

最小化到托盘

最小化到托盘
Private Sub Form_Resize()
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控件(编译前记得要先把只读属性修改掉,有时候会提示要先保存,直接保存。),

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; //图标在任务栏区域可见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();}}}。

怎么能让VB 程序最小化时在托盘显示呀急急急!~希望VB高手帮忙!

怎么能让VB 程序最小化时在托盘显示呀急急急!~希望VB高手帮忙!

给你个例子吧建立一个frmmain主窗体Option ExplicitPrivate Sub Form_Load()'初始化imgIcon控件的Picture属性imgIcon.Picture = LoadPicture(App.Path & "\" & "heart.ico") mnuTrayShow.Enabled = False'初始化NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE nid.uCallbackMessage = WM_NOTIFYICONnid.hicon = imgIcon.Picturenid.szTip = "系统托盘中的图标" & Chr(0)'调用Shell_NotifyIcon函数将图标加入到系统托盘中Shell_NotifyIcon NIM_ADD, nidEnd SubPrivate Sub Form_Unload(Cancel As Integer)'设置自定义类型的变量的内容Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = 0'调用Shell_NotifyIcon方法来删除系统托盘中的图标Shell_NotifyIcon NIM_DELETE, nidUnload frmTempEnd SubPrivate Sub mnuTrayExit_Click()Unload MeEnd SubPrivate Sub mnuTrayHide_Click()'隐藏窗体,并相应改变菜单项的状态Me.HidemnuTrayHide.Enabled = FalsemnuTrayShow.Enabled = TrueEnd SubPrivate Sub mnuTrayIcon_Click()'设置dlgOpen公用对话框的属性,以便取得相应的图标文件dlgOpen.Filter = "图标文件(*.ico)|*.ico"dlgOpen.Flags = cdlOFNFileMustExistdlgOpen.ShowOpenIf dlgOpen.FileName = "" Then Exit Sub'根据所取得图标文件,来改变imgIcon文件的属性imgIcon.Picture = LoadPicture(dlgOpen.FileName)'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_ICONnid.hicon = imgIcon.Picture'调用Shell_NotifyIcon函数来修改系统托盘中的图标Shell_NotifyIcon NIM_MODIFY, nidEnd SubPrivate Sub mnuTrayShow_Click()'显示窗体,并相应改变菜单项的状态Me.ShowmnuTrayHide.Enabled = TruemnuTrayShow.Enabled = FalseEnd SubPrivate Sub mnuTrayTip_Click()Dim str As Stringstr = InputBox("输入系统托盘中的图标的提示信息:", "提示信息") If str = "" Then Exit Sub'设置NOTIFYICONDATA数据结构Dim nid As NOTIFYICONDATAnid.cbSize = Len(nid)nid.hwnd = frmTemp.hwndnid.uId = 1&nid.uFlags = NIF_TIPnid.szTip = str & Chr(0)'调用Shell_NotifyIcon函数来修改系统托盘中的图标的提示Shell_NotifyIcon NIM_MODIFY, nidEnd Sub再建立一个空窗体叫frmTemp再建一个模块,名字随便了Option Explicit'声明Shell_NotifyIcon函数,用于将图标加入到系统托盘中Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean'声明自定义的数据类型NOTIFYICONDATAPublic Type NOTIFYICONDATAcbSize As Longhwnd As LonguId As LonguFlags As LonguCallbackMessage As Longhicon As LongszTip As String * 64End Type'声明常量Public Const NIM_ADD = &H0Public Const NIM_MODIFY = &H1Public Const NIM_DELETE = &H2Public Const NIF_MESSAGE = &H1Public Const NIF_ICON = &H2Public Const NIF_TIP = &H4'定义SetWindowLong,用以改变frmTemp窗体的窗体函数Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long'定义事件的常数代码Public Const WM_LBUTTONDOWN = &H201Public Const WM_RBUTTONDOWN = &H204Public Const WM_USER = &H400'定义自定义的事件WM_NOTIFYICONPublic Const WM_NOTIFYICON = WM_USER + &H100'替换窗口处理函数Public Const GWL_WNDPROC = (-4)'该函数为frmTest的窗体处理函数。

MFC对话框系统托盘详细步骤(精)

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   最小化或关闭时隐藏到系统托盘

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:解决了设置“关闭时隐藏到系统托盘”时,点击“退出”菜单也无法退出的问题。

VB6.0实现窗体最小化时到系统托盘区

VB6.0实现窗体最小化时到系统托盘区

VB6.0将窗体最小化到系统托盘区使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。

本人力荐第二种小巧有效简单的方法。

----------------------------------------------------------------------------------------------------方法一托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。

这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。

在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。

相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。

下面要使用已被微软封装好的控件:csystray1(名称可自定)。

说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。

为方便使用起见,最好编译到Windows\System目录下。

好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。

vb中添加控件的方法就不用我说了吧?----------------------------------------------------------------------------------------------------------控件的属性和事件浅析:该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示;该控件的TrayIcon属性是在托盘中显示的图标式样;该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字;该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。

VC++之自定义消息

VC++之自定义消息

VC++之⾃定义消息⽤户可以⾃定义消息,在应⽤程序中主动发出,这种消息⼀般⽤于应⽤程序的某⼀部分内部处理。

实例说明:当⽤户按键盘上的光标上移键时,程序发送⽤户⾃定义消息,在对应的消息响应函数中弹出消息对话框,显⽰消息发送成功。

操作步骤:(1)创建⼀个单⽂档应⽤程序,名为:⾃定义消息处理。

(2)定义⽤户消息ID(标识符)值,在视图类的头⽂件CMyView.h中的前⾯写如下语句,定义⽤户消息的标识符:…#endif //_MSC_VER > 1000#define WM_MYMESSAGE (WM_USER + 1)class CMyView : public CView{…}(3)声明并⾃定义⽤户消息响应函数:单击项⽬⼯作区ClassView,展开“⾃定义消息处理files”,右键单击CMyView,在弹出的快捷菜单中单击Add Member Function,在弹出的对话框中的Function Type(函数类型)处写:void,在Function Declaration(函数声明)处写:OnMyFunction(),这时就将该消息响应函数加到CMyView.cpp中了,并添加代码:void CMyView::OnMyFunction(){MessageBox(“恭喜你,消息发送成功!”);}(4)在视图类的实现⽂件CMyView.cpp中的消息⼊⼝处添加消息映射:BEGIN_MESSAGE_MAP(CMyView, CView)//{{AFX_MSG_MAP(CMyView)ON_MESSAGE(WM_MYMESSAGE, OnMyFunction)//}}AFX_MSG_MAP(5)编写程序代码将WM_KEYDOWN消息响应函数(⽤户按光标上移键时,将产⽣该消息)映射到视图类CMyView中,并加代码:void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){HWND hWnd = GetSafeHwnd(); //接收消息的窗⼝句柄if(nChar == VK_UP) //光标上移键{::PostMessage(hWnd, WM_MYMESSAGE, 0, 0); //将⾃定义消息插⼊消息队列并返回 return ;}CView::OnKeyDown(nChar, nRepCnt, nFlags);}(6)编译运⾏,按键盘上的光标上移键,程序发送⾃定义消息,弹出⼀个对话框,如下图所⽰:。

WinForm实现最小化到系统托盘方法实例详解

WinForm实现最小化到系统托盘方法实例详解

WinForm实现最⼩化到系统托盘⽅法实例详解本⽂实例讲述了WinForm实现最⼩化到系统托盘⽅法。

分享给⼤家供⼤家参考。

具体分析如下:有个叫NotifyIcon的控件1、建个WinForm项⽬,其它操作略过。

2、拉个NotifyIcon控件,将属性Visable设置成False,在Text属性上随便填些⽂件。

3、实现Form的SizeChanged事件,代码如下:if(this.WindowState == FormWindowState.Minimized) //判断是否最⼩化{this.ShowInTaskbar = false; //不显⽰在系统任务栏notifyIcon.Visible = true; //托盘图标可见}4、实现NotifyIcon控件的DoubleClick事件,代码如下:if(this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true; //显⽰在系统任务栏this.WindowState = FormWindowState.Normal; //还原窗体notifyIcon.Visible = false; //托盘图标隐藏}例题:private ContextMenu notifyiconMnu;#region 最⼩化到任务栏/// <summary>/// 最⼩化到任务栏/// </summary>private void Initializenotifyicon(){//定义⼀个MenuItem数组,并把此数组同时赋值给ContextMenu对象MenuItem[] mnuItms = new MenuItem[3];mnuItms[0] = new MenuItem();mnuItms[0].Text = "显⽰窗⼝";mnuItms[0].Click += new System.EventHandler(this.notifyIcon1_showfrom);mnuItms[1] = new MenuItem("-");mnuItms[2] = new MenuItem();mnuItms[2].Text = "退出系统";mnuItms[2].Click += new System.EventHandler(this.ExitSelect);mnuItms[2].DefaultItem = true;notifyiconMnu = new ContextMenu(mnuItms);notifyIcon1.ContextMenu = notifyiconMnu;//为托盘程序加⼊设定好的ContextMenu对象}private void notifyIcon1_DoubleClick(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.Show();this.ShowInTaskbar = true;this.WindowState = FormWindowState.Normal;notifyIcon1.Visible = false;}}public void notifyIcon1_showfrom(object sender, System.EventArgs e){if (this.WindowState == FormWindowState.Minimized){this.Show();this.ShowInTaskbar = true;this.WindowState = FormWindowState.Normal;notifyIcon1.Visible = false;}}public void ExitSelect(object sender, System.EventArgs e){//隐藏托盘程序中的图标notifyIcon1.Visible = false;//关闭系统this.Close();this.Dispose(true);}#endregionprivate void Form_main_SizeChanged(object sender, EventArgs e) {if (this.WindowState == FormWindowState.Minimized)//判断是否最⼩化{notifyIcon1.Visible = true;this.Hide();this.ShowInTaskbar = false;Initializenotifyicon();}}希望本⽂所述对⼤家的C#程序设计有所帮助。

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;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。

一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。

HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。

自然了,大多数情况下是this->m_hWnd喽。

C++最小化托盘

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。

C#实现WinForm窗口最小化到系统托盘代码

C#实现WinForm窗口最小化到系统托盘代码

C#实现WinForm窗⼝最⼩化到系统托盘代码注:本程序是在VS2005基础上写的。

1、如果不想让程序在任务栏中显⽰,请把窗体的属性ShowInTaskbar设置为false;2、如果想让程序启动时就最⼩化,请设置窗体的属性WindowState设置为Minimized。

(Minimized 最⼩化,Normal正常启动,Maximized最⼤化)3、拉⼀个NotifyIcon控件notifyIcon,为控件notifyIcon的属性Icon添加⼀个icon图标。

4、可以为NotifyIcon加⼀个ContextMenuStrip右键菜单menu_Notify。

5、本例⼦禁⽤了窗体最⼤化按钮。

(设置窗体的属性MaximizeBox的属性为false)6、主要代码:#region 私有⽅法 处理窗体的 显⽰ 隐藏 关闭(退出)private void ExitMainForm(){if (MessageBox.Show("您确定要退出化验数据接收程序吗?", "确认退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK){this.notifyIcon.Visible = false;this.Close();this.Dispose();Application.Exit();}}private void HideMainForm(){this.Hide();}private void ShowMainForm(){this.Show();this.WindowState = FormWindowState.Normal;this.Activate();}#endregion#region 右键菜单处理,显⽰ 隐藏 退出private void menuItem_Show_Click(object sender, EventArgs e){ShowMainForm();}private void menuItem_Hide_Click(object sender, EventArgs e){HideMainForm();}private void menuItem_Exit_Click(object sender, EventArgs e){ExitMainForm();}#endregion#region 双击托盘上图标时,显⽰窗体private void notifyIcon_DoubleClick(object sender, EventArgs e){if (this.WindowState == FormWindowState.Normal){this.WindowState = FormWindowState.Minimized;HideMainForm();}else if(this.WindowState == FormWindowState.Minimized){ShowMainForm();}}#endregion#region 点最⼩化按钮时,最⼩化到托盘private void frmMain_SizeChanged(object sender, EventArgs e){if (this.WindowState == FormWindowState.Minimized){HideMainForm();}}#endregion#region 窗体关闭时最⼩化到托盘private void frmMain_FormClosing(object sender, FormClosingEventArgs e) {e.Cancel = true;HideMainForm();}#endregion。

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

1.自定义消息的方法#define WM_MYMESSAGE WM_USER+1afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam );ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage )//这句要在BEGIN MESSAGE MAP和end中间LRESULT cxx::OnMyMessage ( WPARAM wParma, LPARAM lParam ){...}2.最小化到托盘函数void CMainFrame::toTray(void){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));//CString str = L"计划任务提醒";//nid.szTip = {L"计划任务提醒"}; //信息提示条为“计划任务提醒”Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标ShowWindow(SW_HIDE);//隐藏主窗口}3、对托盘处理过程函数LRESULT CMainFrame::OnShowTask(WPARAM wParam,LPARAM lParam){// TODO: 在此处添加消息处理程序代码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,L"关闭");//确定弹出式菜单的位置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);//简单的显示主窗口完事儿}break;}return 0;}4、上面是mfc下托盘的处理。

下面是一个完整的纯SDK的托盘程序。

#include <windows.h>#include <atlimage.h>#include "resource.h"//#include <afxwin.h>#define WM_SHOWTASK WM_USER+10//#define _AFXDLL;HWND hWnd; //程序主窗口句柄HINSTANCE mhInstance; //实例句柄NOTIFYICONDATA nid; //托盘结构体LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; void ToTray(void);LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);CImage image;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("HelloWin") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground= (HBRUSH) GetStockObject (BLACK_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName= szAppName ;if (!RegisterClass (&wndclass)){MessageBox ( NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow( szAppName, // window class nameTEXT ("Full Screen Display"), // window caption// WS_OVERLAPPEDWINDOW, // window styleWS_POPUP,/* CW_USEDEFAULT,// initial x positionCW_USEDEFAULT,// initial y positionCW_USEDEFAULT,CW_USEDEFAULT,// initial x size*/ 100,100,100,100,NULL, // parent window handleNULL, // window menu handlehInstance, // program instance handleNULL) ; // creation parametershWnd = hwnd;mhInstance = hInstance;ShowWindow (hwnd, SW_SHOW) ;UpdateWindow (hwnd) ;SetWindowPos(hwnd,HWND_TOPMOST,540,260,200,200,SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE ); ToTray();while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_CREATE:return 0 ;case WM_PAINT:{HDC hdc = GetDC(hwnd);CImage image;image.Load(L"C:\\bitmap\\002.bmp");int x = GetSystemMetrics(SM_CXSCREEN),y = GetSystemMetrics(SM_CYSCREEN);// image.BitBlt(hdc,x-100,y-100,x,y,0,0);SetStretchBltMode(hdc,COLORONCOLOR);RECT rect;GetClientRect(hwnd,&rect);// image.StretchBlt(hdc,x-500,y-500,x,y);image.StretchBlt(hdc,rect);image.Destroy();ReleaseDC(hwnd,hdc);// delete rect;return 0 ;}case WM_DESTROY:Shell_NotifyIcon(NIM_DELETE,&nid);PostQuitMessage (0) ;return 0;case WM_SHOWTASK:OnShowTask(wParam,lParam);return 0;case WM_COMMAND:switch (LOWORD (wParam)){case IDR_MENU1:Shell_NotifyIcon(NIM_DELETE,&nid);PostQuitMessage (0) ;return 0;case IDR_MENU2:SetWindowPos(hwnd,HWND_TOPMOST,540,260,200,200,SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOMOVE |SWP_NOSIZE );return 0;case IDR_MENU3:SetWindowPos(hwnd, HWND_TOPMOST,540,260,200,200,SWP_HIDEWINDOW);return 0;}}return DefWindowProc (hwnd, message, wParam, lParam) ;}void ToTray(void){nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);nid.hWnd=hWnd;nid.uID=IDI_ICON1;nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称nid.hIcon=LoadIcon(mhInstance,MAKEINTRESOURCE(IDI_ICON1));//信息提示条为“计划任务提醒”WCHAR sz[] = L"计划任务提醒";memcpy(nid.szTip,sz,sizeof(sz));Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标// ShowWindow(hWnd,SW_HIDE);//隐藏主窗口}LRESULT OnShowTask(WPARAM wParam,LPARAM lParam){if(wParam!=IDI_ICON1)return 1;switch(lParam){case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”{LPPOINT lpoint=new tagPOINT;::GetCursorPos(lpoint);//得到鼠标位置HMENU hMenu = CreatePopupMenu();AppendMenu(hMenu,MF_STRING,IDR_MENU1,L"关闭");AppendMenu(hMenu,MF_STRING,IDR_MENU2,L"显示");AppendMenu(hMenu,MF_STRING,IDR_MENU3,L"隐藏");TrackPopupMenu(hMenu, TPM_LEFTALIGN,lpoint->x,lpoint->y, 0,hWnd, NULL);DestroyMenu(hMenu);delete lpoint;}break;case WM_LBUTTONDBLCLK://双击左键的处理{ShowWindow(hWnd,SW_SHOW);//简单的显示主窗口完事儿}break;}return 0;}。

相关文档
最新文档