vc如何实现关闭时最小化到托盘

author author     2023-05-06     284

关键词:

点击X时最小化到托盘,最好给出完整的源代码。
你给的这个答案,我已经在网上看过了,你的ToTray()是什么时候调用的
尤其上你说的第二步,程序怎么就最小化到托盘区了
我的邮箱:zhangjun_fy@163.com
谢谢

参考技术A 一、托盘简介

所谓的“托盘”,在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喽。

uID : 在工程中定义的图标ID

uFlags : 这个成员标志着其他哪些成员的数据是有效的,分别为NIF_ICON, NIF_MESSAGE, NIF_TIP,分别代表着数据有效的成员是hIcon, uCallbackMessage, szTip。当然,三个值可以用“|”联系到一起。下面分别对涉及到的成员进行阐述

hIcon : 要增加,删除或修改的图标句柄。如果只知道个uID, 一般可能会用函数LoadIcon来得到句柄。例如LoadIcon ( AfxGetInstanceHandle() ,MAKEINTRESOURCE (IDR_MAINFRAME) )。

uCallbackMessage : 这在对托盘区的操作中,是比较重要的数据成员。这是个消息标志,当用鼠标对托盘区相应图标进行操作的时候,就会传递消息给Hwnd所代表的窗口。所以说,在uFlags中,一般都得标志它有效。这里一般都是自定义的消息。

szTip : 鼠标移动到托盘图标上时的提示文字。

三、托盘编程例子

有关托盘编程的基础知识呢,也就上面这些了。下面呢,我们就进入具体的实战演练阶段,举几个托盘编程的例子瞧瞧,加深理解。

1、将程序最小化到系统托盘区的函数toTray()。

void CTimeWakeDlg::toTray()

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));
strcpy(nid.szTip,"计划任务提醒");//信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口


这是个很简单的函数,里面首先给NOTIFYICONDATA赋值,然后调用shell_NotifyIcon, 头一个参数是NIM_ADD,表示添加。然后用函数ShowWindow 隐藏主窗口,这样,就实现了将程序最小化到系统托盘区的任务了。

2、程序已经最小化到托盘区了,但是呢,对托盘图标的操作如何进行呢?这就体现了结构NOTIFYICONDATA的成员uCallbackMessage 的作用了。它所提供的作用就是,当用户用鼠标点击托盘区的图标的时候(无论是左键还是右键),会向hWnd所代表的窗口传送消息,如果是上例,消息的名称就是WM_SHOWTASK。根据VC的消息机制,对自定义消息增加消息响应函数。

在头文件的//AFX_MSG和//AFX_MSG之间声明消息响应函数:

afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);

然后在CPP文件中添加消息映射。在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 之间加入: ON_MESSAGE(WM_SHOWTASK,onShowTask)将消息和消息响应函数映射起来。

然后就是在CPP文件中加入函数onShowTask的实现了:

LRESULT CTimeWakeDlg::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();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
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_SHOW);//简单的显示主窗口完事儿

break;

return 0;

参考资料:http://www.yesky.com/20021018/1635655.shtml
参考技术B 我这里有一个做好的程序
看的话把邮箱给我

delphi最小化程序到任务栏托盘增加右键popmenu

...中间层时,中间层往往不需要点击关闭时立刻关闭,而是最小化到托盘。故而特意隐藏关闭按钮功能。      1)隐藏退出功能用PopMenu退出菜单代替            1.增... 查看详情

foobar2000设置关闭按钮最小化到系统托盘

1、设置托盘选项:2、【File】->【Preferences】->【Advanced】->【Display】->【DefaultUserInterface】->【Closeminimises】 最后来一张经典皮肤感受下foobar2000的强大:  查看详情

winform之窗口最小化到托盘及右键图标显示菜单

日常开发有时候需要实现窗口最小化到系统托盘,本文就来讲讲该如何实现winfrom最小化到系统托盘,本例子基于VS2019编写。用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任务栏中有对应的图标... 查看详情

delphitrayicon控件,如何实现窗口最小化的时候到系统托盘(代码片段)

...g:TWMSysCommand);begininherited;ifMsg.CmdType=SC_MINIMIZEthen//窗口收到最小化消息beginApplication.Minimize;//最小化程序ShowWindow(Application.Handle,SW_HIDE);//隐藏任务栏图标end;end;记得在TrayIcon的单击或双击事件中还原窗口,否则你就看不见程序了,只... 查看详情

如何关闭outlook时实现最小化

...总是会直接关闭软件,想要像其他软件可以有设置关闭时最小化的功能,可是很遗憾,某有。。。搜索发现,可以通过KeepOutlookRunning.dll插件,实现这个小功能。压缩包中有32位和64位的,各位可以根据自己的机型选择。KeepOutlookRu... 查看详情

怎么设置程序启动后最小化到托盘?

设了个自启动的程序,运行方式最小化,也设置了最小化到托盘。但启动后会先最小化到桌面下方,要打开在点击最小化才会到托盘。怎么设置程序启动后自动最小化到托盘?要实现将程序最小化到托盘,就要截获WM_SIZE消息,... 查看详情

delphi-利用trztrayicon实现winfrm工程最小化到托盘(代码片段)

...后点击RC3.exe一键安装。    DelphiWinFrm工程最小化到托盘Delphi新建WinFrm工程,在主窗体上添加TRzTrayIcon、TImageList和TPopupMenu。此时运行工程,点击最小化即可实现到托盘的效果。  系统最小化时实现提示信息选... 查看详情

如何把程序最小化到托盘图标

参数及返回值说明:dwMessage:[输入参数]说明要执行的动作。动作的可选值如下:NIM_ADD增加一个图标到托盘区NIM_DELETE从托盘区删除一个图标NIM_MODIFY修改图标NIM_SETFOCUS将焦点(Focus)返回托盘区。这个消息通常在托盘区图标完成... 查看详情

【c#】winform中如何让窗口最小化时直接最小化到托盘,后台运行

...,为控件notifyIcon1的属性Icon添加一个icon图标。3.添加窗体最小化事件(首先需要添加事件引用):代码如下:this.SizeChanged+=newSystem.EventHandler(this.Form1_SizeChanged);//上面一行是主窗体InitializeComponent()方法中需要添加的引用privatevoidForm1_Siz... 查看详情

electron最小化到托盘video停止

参考技术Aelectron最小化到托盘video停止可以在electron中实现tray功能。根据查询相关公开信息显示,electron最小化到托盘video停止可以在electron中实现tray功能。详细的代码实现可以参考electron官方文档。 查看详情

最小化到系统托盘区是啥意思?

...的快捷键没改过的话可以通过ctrl+alt+z打开参考技术A就是最小化到通知区域,程序没关闭,只是最小化了,而且放在显示时间那的“通知区域” 参考技术B就是最小化到屏幕右下角那里,那个区域就是系统托盘了。 查看详情

将应用程序最小化到系统托盘

】将应用程序最小化到系统托盘【英文标题】:minimizeapptosystemtray【发布时间】:2011-11-2908:07:35【问题描述】:我有一个由C#和VisualStudio2010提供支持的Windows窗体应用程序。如何将我的应用程序最小化到系统托盘(不是任务栏),... 查看详情

如何在 Qt 中打开和最小化外部应用程序到系统托盘

】如何在Qt中打开和最小化外部应用程序到系统托盘【英文标题】:HowtoopenandminimizeexternalapptosystemtrayinQt【发布时间】:2019-04-0606:59:58【问题描述】:QProcess可以用来打开外部程序,但它总是会在所有其他窗口的前面打开一个应用... 查看详情

java的。最小化到系统托盘

我有一个应用程序检查密码,如果密码正确,应该最小化到系统托盘。但我不知道如何设置frame隐形或使用ActionListener最小化它。publicclassMainWindowextendsJFrame{privateJPanelpanel1;privateJTextFieldPassword;privateJButtonreadyBtn;privateJLabellabel1;private 查看详情

win10定制版qq怎么最小化到托盘

...QQ在托盘里还有.或者按那个"+"选择隐藏界面,然后最小化就什么也看不到了,托盘里也没有了,要呼出的话按CTRL+ALT+C就可以啦.追问win10定制版,不是普通版参考技术A菜单键+d,或者直接点解软件右上角缩小功能键就可以,就... 查看详情

C#全局热键在第一次最小化到托盘时不起作用,但在显示并再次最小化后它起作用

】C#全局热键在第一次最小化到托盘时不起作用,但在显示并再次最小化后它起作用【英文标题】:C#Globalhotkeyswon\'tworkinfirstminimizetotraybutaftershowingandminimizeagainitworks【发布时间】:2014-04-1308:48:54【问题描述】:对不起,如果我错... 查看详情

win10最小化到托盘游戏掉线

参考技术AWin10蓝牙鼠标总是频繁掉线的解决方法:1、右键单击屏幕右下角托盘区的蓝牙图标,在弹出的对话框中选中“允许蓝牙设备查找这台电脑”,再点击确定。2、右键单击屏幕左下角的Win图标>点击进入“设备管理器”>... 查看详情

最小化托盘的实现方法

在书上看到的,认为实用,记下了。首先,最小化托盘的基本原理是,将应用程序的主窗口隐藏,然后在托盘中绘制应用程序的图标。然后再为托盘图标加入一些事件处理。核心函数是Shell_NotifyIcon()函数,负责向系统传递消息,... 查看详情