什么软件可以把游戏winform最小化到托盘盘

后使用快捷导航没有帐号?
查看: 513|回复: 2
新人欢迎积分0 阅读权限40积分813精华0UID3045133帖子金钱148 威望0
Lv.4, 积分 813, 距离下一级还需 187 积分
UID3045133帖子威望0 多玩草11 草
神魔大陆支持这项功能吗?怎么实现?
┋喵樱°┋
新人欢迎积分1 阅读权限80积分16970精华0UID帖子金钱138751 威望2
┋接点名°┋
Lv.8, 积分 16970, 距离下一级还需 3030 积分
UID帖子威望2 多玩草617 草
在游戏的界面设置—热键设置—老板键就可以了
新人欢迎积分0 阅读权限40积分813精华0UID3045133帖子金钱148 威望0
Lv.4, 积分 813, 距离下一级还需 187 积分
UID3045133帖子威望0 多玩草11 草
谢谢啊啊........
需要金钱:1100
手机盒子客户端点击或扫描下载
Powered by您所在的位置: &
VC++如何将程序最小化到托盘
VC++如何将程序最小化到托盘
中国IT实验室收集整理
中国IT实验室
Windows操作系统中的某些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互。为了实现这种功能,托盘程序就出现了。本文主要介绍,托盘编程的相关函数和一些例子。
所谓的&托盘&,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。其实,托盘区的VC++编程很简单,下面简要阐述一下子喽!
一、托盘编程相关函数
其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。
绘制图标以及确定图标所传送消息的函数只有一个,那就是:
WINSHELLAPI&BOOL&WINAPI&Shell_NotifyIcon( &DWORD&dwMessage, &PNOTIFYICONDATA&pnid &);&
这个函数呢,负责向系统传递消息,以添加、修改或删除托盘区的图标。她的返回值呢,是个布尔类型的。就是说,如果返回0,那就是成仁啦,非0才成功。
参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是NIM_MODIFY。参数pnid就是具体的和程序在托盘区的图标有关系的结构了。它的定义如下:
typedef&struct&_NOTIFYICONDATA&{ &DWORD&cbS &HWND&hW &UINT&uID; &UINT&uF &UINT&uCallbackM &HICON&hI &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.cbSize=(DWORD)sizeof(NOTIFYICONDATA); &nid.hWnd=this-&m_hW &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) &&{ &if(wParam!=IDR_MAINFRAME) &return&1; &switch(lParam) &{ &case&WM_RBUTTONUP:&{ &LPPOINT&lpoint=new&tagPOINT; &::GetCursorPos(lpoint);&CMenu& &menu.CreatePopupMenu();&&&menu.AppendMenu(MF_STRING,WM_DESTROY,&关闭&); &&menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint-&x,lpoint-&y,this); &&HMENU&hmenu=menu.Detach(); &menu.DestroyMenu(); &delete& &} &break; &case&WM_LBUTTONDBLCLK:&{ &this-&ShowWindow(SW_SHOW);&} &break; &} &return&0; &}&
通过本文的分析,相信大家对托盘程序都有了一个大致的了解。托盘编程核心是用NOTIFYICONDATA结构,希望对您有所帮助。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Visual C++是一个可视化软件开发工具。它不仅是一个C++编译器,
国内网盘的关停让用户操碎了心 下一个风口在哪
很久很久以前,冬天爱上了夏天,可是他们始终不能相见
流火过,金秋来,在学校开学之前的最后一周,终于凉快
又到了一周的末尾,闷热过后,这周的温度算是降下来了
本书主要介绍由Sun微系统公司创建的Java编程语言。
除了核心内容外,Java还有许多免费的财富,即开放源代码的库。本书就是为了
51CTO旗下网站最小化托盘的实现方法
在书上看到的,觉得有用,记下了。
首先,最小化托盘的基本原理是,将应用程序的主窗体隐藏,然后在托盘中绘制应用程序的图标。然后再为托盘图标添加一些事件处理。
核心函数是Shell_NotifyIcon()函数,负责向传递消息,添加、修改或删除托盘区的图标。原型:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYCONDATA pnid
其中dwMessage标示功能,有NIM_ADD/NIM_DELETE/NIM_MODIFY。
pnid是程序最小化到托盘的图标信息结构体:
typedef struct _NOTIFYCONDATA {
//结构的长度
//标志着其他哪些成员数据的有效性?
UINT uCallbackM
//当用户单击托盘区图标时会向窗口发送消息
//图标句柄
char szTip[64];
//鼠标移动到托盘图标上时显示的文字
} NOTIFYICONDATA, *PNOTIFYICONDATA;
相关代码:
NOTIFYICONDATA
nid.cbSize = (DWORD) sizeof (NOTIFYICONDATA);
nid.hWnd = this->m_hW
nid.uID = IDR_MAINFRAME;
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
//这句我不理解?
nid.uCallbackMessage = WM_CALL;
nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"MyApp");
Shell_NotifyIcon(NIM_ADD,&nid);
ShowWindow(SW_HIDE); //隐藏主窗口
接着自定义消息WM_CALL,方法有一篇文章有讲到。这里要注意规定了回调消息wParam接收图标ID,lParam接收鼠标的行为。
另外,当程序全部关闭时,也应该删除掉托盘,代码差不多,不重复了。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'首先,先拖一个NotifyIcon到主窗体,然后设置NotifyIcon的图标,不然等下最小化后,都找不到那个程序了,还有那个Text也是,不写名字,就默认是NotifyIcon了..如下图:然后双击NotifyIcon,代码如下:
& & & &&///&&summary&
&&&&&&&&///&添加双击托盘图标事件(双击显示窗口)
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name="sender"&&/param&
&&&&&&&&///&&param&name="e"&&/param&
&&&&&&&&private&void&notifyIcon1_MouseDoubleClick(object&sender,&MouseEventArgs&e)
&&&&&&&&&&&&if&(WindowState&==&FormWindowState.Minimized)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//还原窗体显示&&&&
&&&&&&&&&&&&&&&&WindowState&=&FormWindowState.N
&&&&&&&&&&&&&&&&//激活窗体并给予它焦点
&&&&&&&&&&&&&&&&this.Activate();
&&&&&&&&&&&&&&&&//任务栏区显示图标
&&&&&&&&&&&&&&&&this.ShowInTaskbar&=&true;
&&&&&&&&&&&&&&&&//托盘区图标隐藏
&&&&&&&&&&&&&&&&notifyIcon1.Visible&=&false;
&&&&&&&&&&&&}
&&&&&&&&}然后分别到主窗口的单击事件里面添加以下两个方法即可,如下图:代码如下:
& & & &&///&&summary&
&&&&&&&&///&判断是否最小化,然后显示托盘
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name="sender"&&/param&
&&&&&&&&///&&param&name="e"&&/param&
&&&&&&&&private&void&F_Main_SizeChanged(object&sender,&EventArgs&e)
&&&&&&&&&&&&//判断是否选择的是最小化按钮
&&&&&&&&&&&&if&(WindowState&==&FormWindowState.Minimized)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//隐藏任务栏区图标
&&&&&&&&&&&&&&&&this.ShowInTaskbar&=&false;
&&&&&&&&&&&&&&&&//图标显示在托盘区
&&&&&&&&&&&&&&&&notifyIcon1.Visible&=&true;
&&&&&&&&&&&&}
&&&&&&&&///&&summary&
&&&&&&&&///&确认是否退出
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name="sender"&&/param&
&&&&&&&&///&&param&name="e"&&/param&
&&&&&&&&private&void&F_Main_FormClosing(object&sender,&FormClosingEventArgs&e)
&&&&&&&&&&&&if&(MessageBox.Show("是否确认退出程序?",&"退出",&MessageBoxButtons.OKCancel,&MessageBoxIcon.Question)&==&DialogResult.OK)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&关闭所有的线程
&&&&&&&&&&&&&&&&this.Dispose();
&&&&&&&&&&&&&&&&this.Close();
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&e.Cancel&=&true;
&&&&&&&&&&&&}&
&&&&&&&&}下面是托盘右键菜单的制作:先拖一个ContextMenuStrip到主界面,然后添加你的右键菜单,在然后绑定给NotifyIcon即可,图形如代码如下:绑定菜单给NotifyIcon后台代码:
& & & &&///&&summary&
&&&&&&&&///&托盘右键显示主界面
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name="sender"&&/param&
&&&&&&&&///&&param&name="e"&&/param&
&&&&&&&&private&void&显示ToolStripMenuItem_Click(object&sender,&EventArgs&e)
&&&&&&&&&&&&WindowState&=&FormWindowState.N
&&&&&&&&///&&summary&
&&&&&&&&///&托盘右键退出程序
&&&&&&&&///&&/summary&
&&&&&&&&///&&param&name="sender"&&/param&
&&&&&&&&///&&param&name="e"&&/param&
&&&&&&&&private&void&退出ToolStripMenuItem_Click(object&sender,&EventArgs&e)
&&&&&&&&&&&&if&(MessageBox.Show("是否确认退出程序?",&"退出",&MessageBoxButtons.OKCancel,&MessageBoxIcon.Question)&==&DialogResult.OK)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&关闭所有的线程
&&&&&&&&&&&&&&&&this.Dispose();
&&&&&&&&&&&&&&&&this.Close();
&&&&&&&&&&&&}
阅读(...) 评论()

我要回帖

更多关于 c 最小化到托盘 的文章

 

随机推荐