MFC基于Dialog的窗口程序启动时最小化到托盘

合集下载

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();}。

程序最小化到托盘

程序最小化到托盘

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

MFC实现对话框的最大最小化【详细】

MFC实现对话框的最大最小化【详细】

MFC实现对话框的最大最小化【详细】实现MFC对话框的最大最小化如何在MFC工程中,为对话框添加最大化,最小化图标:在绘制对话框的面板中,右击对话框,点击属性,勾选相应的就可以。

集体控件操作:第一步、在对话框类中(CDemoDlg.h文件)定义如下变量和函数void ReSize();POINT old;afx_msg void OnSize(UINT nType, int cx, int cy);PS:在CStuDemoDlg.cpp中BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)后面添加ON_WM_SIZE(),否则不会当点击最大化图标时,不会调用OnSize()函数。

第二步、在OnInitDialog()中计算出原始对话框的大小CRect rect;GetClientRect(&rect); //取客户区大小old.x=rect.right-rect.left;old.y=rect.bottom-rect.top;第三步、添加 WM_SIZE消息void CDemoDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif (nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED){ReSize();}}第四步、刷新控件函数void CDemoDlg::ReSize(){float fsp[2];POINT Newp; //获取现在对话框的大小CRect recta;GetClientRect(&recta); //取客户区大小Newp.x=recta.right-recta.left;Newp.y=recta.bottom-recta.top;fsp[0]=(float)Newp.x/old.x;fsp[1]=(float)Newp.y/old.y;CRect Rect;int woc;CPoint OldTLPoint,TLPoint; //左上角CPoint OldBRPoint,BRPoint; //右下角HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件while(hwndChild){woc=::GetDlgCtrlID(hwndChild);//取得IDGetDlgItem(woc)->GetWindowRect(Rect);ScreenToClient(Rect);OldTLPoint = Rect.TopLeft();TLPoint.x = long(OldTLPoint.x*fsp[0]);TLPoint.y = long(OldTLPoint.y*fsp[1]);OldBRPoint = Rect.BottomRight();BRPoint.x = long(OldBRPoint.x *fsp[0]);BRPoint.y = long(OldBRPoint.y *fsp[1]);Rect.SetRect(TLPoint,BRPoint);GetDlgItem(woc)->MoveWindow(Rect,TRUE);hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);}old=Newp;}很重要的一点:确保每个控件的ID都不一样,并在Resource.h 中已经宏定义了,要不要不会改变。

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; //托盘图标隐藏}至此简单的系统托盘功能就实现了。

最小化到托盘

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

Qt之程序最小化托盘显示及操作

Qt之程序最小化托盘显示及操作

Qt之程序最⼩化托盘显⽰及操作展开1.功能说明对于GUI程序,如果想要实现当最⼩化时,程序从任务栏消失,在系统托盘显⽰⼀个图标,表⽰此程序,并能在托盘内通过双击或者菜单使程序界⾯恢复。

2.使⽤的类主要使⽤的此类:QSystemTrayIcon。

其中QSystemTrayIcon是主要操作系统托盘的操作类,通过此类,可以在托盘显⽰指定程序的图标,响应⽤户⿏标的单击,双击,或wheel操作(好像只对X11系统有⽤),显⽰指定消息,显⽰菜单等。

此类中有两个枚举类型,分别如下:enum QSystemTrayIcon::ActivationReason 表述托盘上图标的触发缘由常量值描述QSystemTrayIcon::Unknown 0 未知原因QSystemTrayIcon::Context 1 请求系统托盘的上下⽂菜单QSystemTrayIcon::DoubleClick 2 ⿏标双击QSystemTrayIcon::Trigger 3 ⿏标单击QSystemTrayIcon::MiddleClick 4 ⿏标中间按键enum QSystemTrayIcon::MessageIcon 当显⽰⽓球消息时显⽰的图⽚常量值描述QSystemTrayIcon::NoIcon 0 不显⽰图标QSystemTrayIcon::Information 1 显⽰信息图标QSystemTrayIcon::Warning 2 显⽰告警图标QSystemTrayIcon::Critical 3 显⽰致命图标3.QSystemTrayIcon常⽤函数void setIcon(const QIcon& icon)设置系统托盘的图标void setToolTip(const QString &tip)设置⿏标放到图标上的提⽰⽂字void setContextMenu(QMenu* menu);设置当点击图标弹出的菜单void show()显⽰系统托盘图标4.代码1.实现程序托盘显⽰a)新建⼀个QWidget程序,在界⾯上放⼊⼀个QPushButton,text改为“最⼩化”,如下图:b)给⼯程加⼊Qt Resource资源⽂件,添加⼀个在托盘显⽰的icon图⽚,如图:c)给a中的QPushButton,建⽴槽函数,在槽函数内实现程序最⼩化托盘显⽰void MainWindow::on_pushButton_clicked(){//隐藏程序主窗⼝this->hide();//新建QSystemTrayIcon对象mSysTrayIcon = new QSystemTrayIcon(this);//新建托盘要显⽰的iconQIcon icon = QIcon("../IMClient/Resources/GG64.png");//将icon设到QSystemTrayIcon对象中mSysTrayIcon->setIcon(icon);//当⿏标移动到托盘上的图标时,会显⽰此处设置的内容mSysTrayIcon->setToolTip(QObject::trUtf8("测试系统托盘图标"));//在系统托盘显⽰此对象mSysTrayIcon->show();}运⾏程序,点击按钮最⼩化,可以在系统托盘看到此图标,⿏标移到上⾯,可以见看见代码中所设的”测试系统托盘图标”⽂本,如图:2.实现托盘图标操作最⼩化后显⽰在系统托盘内,此时除了在任务管理器中结束此程序,⽆法再做其他操作,⽽我们还想实现双击图标显⽰主界⾯,单击图标弹出菜单等实现其他操作,此时,就需要使⽤QSystemTrayIcon::ActivationReason属性了。

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘一、托盘是什么所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。

其定义为:typedef struct _NOTIFYICONDATA {DWORD cbSize;//以字节为单位的这个结构的大小HWND hWnd;//接收托盘图标通知消息的窗口句柄UINT uID;//应用程序定义的该图标的ID号UINT uFlags;//设置该图标的属性UINT uCallbackMessage;//应用程序定义的消息ID号,此消息传递给hWndHICON hIcon; //图标的句柄char szTip[64]; //鼠标停留在图标上显示的提示信息} NOTIFYICONDATA, PNOTIFYICONDATA;该结构中,成员uFlags可以是下列的组合或其中之一:NIF_ICON:设置成员hIcon有效NIF_MESSAGE:设置成员uCallbackMessage有效NIF_TIP:设置成员szTip有效2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。

其原型为:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:NIM_ADD:增加图标NIM_DELETE:删除图标NIM_MODIFY:修改图标三、如何实现1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+13、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

怎么能让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给主窗口(已隐藏 ,将程序结束。

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属性是鼠标移动到该控件上面时,显示的提示文字;该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。

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);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_DELETE, &nid);//在托盘中删除图标} 最⼩化的时候去隐藏窗⼝需要捕捉最⼩化的消息,这个消息在处理WM_SIZE时,wParam参数为SIZE_MINIMIZED。

MFC基于Dialog的托盘程序(Visual C++ 2013)

MFC基于Dialog的托盘程序(Visual C++ 2013)
MFC 基于 Dialog 的托盘程序
MFC 基于 DIALOG 的托盘程序......................................................................................................................................1
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip);
在执行文件 TrayDialog.cpp 中添加函数定义
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip) {
一、托盘是什么
所谓的“托盘”,在 Windows 系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部 分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
二、NOTIFYICODDATA 结构和 Shell_NotifyIcon 函数
1、 NOTIFYICONDATA 结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提 示消息和图标对应的窗口等内容。其定义为:
#define WM_TRAY_NOTIFICATION WM_USER+1
打开类向导,选择消息选项卡,打开添加自定义消息对话框,添加自定义消息;
Figure 1 添加自定义消息 这时头文件 TrayDialogDlg.h 中会自动添加声明
afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);

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#编写最小化到托盘程序的右键菜单

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_SizeChangedthis.WindowState = FormWindowState.Minimized;}//窗体大小改变事件private void TestForm_SizeChanged(object sender, EventArgs e){//窗体状态为最小化时if (this.WindowState == FormWindowState.Minimized){this.ShowInTaskbar = false;//不显示在任务栏this.notifyIcon1.Visible = true;//显示托盘图标}}//托盘图标双击事件private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){//判断可有可无,因为目前的代码出现托盘的时候只会为最小化if (this.WindowState == FormWindowState.Minimized){//还原this.WindowState = FormWindowState.Normal;}this.Activate();this.notifyIcon1.Visible = false;this.ShowInTaskbar = true;}}二、C#实现点击窗体关闭按钮时到系统托盘,右键系统托盘弹出菜单点击退出退出整个程序private void FormSender_FormClosing(object sender, FormClosingEventArgs e){if (e.CloseReason == /doc/ec5746452.html,erClosing)//当用户点击窗体右上角X按钮或(Alt + F4)时发生{e.Cancel = true;this.ShowInTaskbar = false;this.notifyIcon1.Visible = true;notifyIcon1.BalloonTipTitle = "程序已最小化";notifyIcon1.BalloonTipT ext = "程序还在继续运行......" + "\r\n" + "双击托盘图标还原窗口.";notifyIcon1.ShowBalloonTip(2000);this.Hide();}}private void 退出ToolStripMenuItem_Click(object sender, EventArgs e){ListenThread.Abort();th.Abort();tcpListener.Stop();Application.Exit();}private void notifyIcon1_DoubleClick(object sender, EventArgs e){if (this.Visible == false)this.Visible = true;}private void FormSender_SizeChanged(object sender, EventArgs e){if (WindowState == FormWindowState.Minimized){this.ShowInTaskbar = true;notifyIcon1.Visible = false;}}三、C#中击右上角的关闭按钮("X")实现不是关闭而是最小化到右下角托盘;还有增加托盘图标右键单击弹出“退出”菜单using System;using System.Collections.Generic;using/doc/ec5746452.html,ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class Form1 : Form{int i = 0;public Form1(){InitializeComponent();}private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){this.Show();}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (i == 0){e.Cancel = true;this.Hide();}else{e.Cancel = false;}}private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e){i =1;Application.Exit();}}}四、C# WinForm窗口最小化到系统托盘右键操作菜单注:开发工具:VS20051。

C#winform最小化到托盘

C#winform最小化到托盘
{
if (closeTag)
{
e.Cancel = true;
NormalToMinimized();
}
}
关闭事件
private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
this.notifyIcon.Visible = true;
}
private void frmMain_FormClosing(object sender, FormClosingEventHandler e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
notifyIcon.Visible = false;
}
private void NormalToMinimized()
{
e.Cancel = true;
NormalToMinimized();
}
//单击显示窗体
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
view plain
//全家变量bool closeTag = true;
//最小化
private void form1_Resize(object sender, EventArgs e)
{

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)。

MFC基于Dialog的窗口程序启动时最小化到托盘
一、托盘是什么
所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数
1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对
应的窗口等内容。

其定义为:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
//以字节为单位的这个结构的大小
HWND hWnd;
//接收托盘图标通知消息的窗口句柄
UINT uID;
//应用程序定义的该图标的ID号
UINT uFlags;
//设置该图标的属性
UINT uCallbackMessage;
//应用程序定义的消息ID号,此消息传递给hWnd
HICON hIcon; //图标的句柄
char szTip[64]; //鼠标停留在图标上显示的提示信息
} NOTIFYICONDATA, PNOTIFYICONDATA;
该结构中,成员uFlags可以是下列的组合或其中之一:
NIF_ICON:设置成员hIcon有效
NIF_MESSAGE:设置成员uCallbackMessage有效
NIF_TIP:设置成员szTip有效
2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。

其原型为:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);
Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:
NIM_ADD:增加图标
NIM_DELETE:删除图标
NIM_MODIFY:修改图标
三、如何实现
1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;
2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+1
3、在CYourDlg::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_MAINFRAME));
strcpy(m_nid.szTip, "服务器程序"); // 信息提示条为"服务器程序"
Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标
4、在CYourDlg.h文件中声明消息函数原型
LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);
5、在CYourDlg.cpp文件中进行消息映射
在BEGIN_MESSAGE_MAP(CYourDlg, CDialog)和END_MESSAGE_MAP中间加入以下代码:
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
6、在CYourDlg.cpp文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

LRESULT CYourDlg::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, "关闭");
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
HMENU hmenu = menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK: // 双击左键的处理
{
this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口
}
break;
}
return 0;
}
7、添加WM_SIZE的消息映射函数,处理最小化时的操作。

void CYourrDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType == SIZE_MINIMIZED)
{
ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口
}
}
8、添加WM_DESTROY的消息响应函数,关闭窗口时将托盘中的应用程序图标删除BOOL CYourDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
// 在托盘区删除图标
Shell_NotifyIcon(NIM_DELETE, &m_nid);
return CDialog::DestroyWindow();
}
经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。

该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出关闭菜单。

相关文档
最新文档