关于托盘的一点总结
2006-07-20 11:37:31 来源:WEB开发网核心提示:本文示例源代码或素材下载 很多软件例如:KV3000等在关闭之后会在托盘区有一个小的托盘图标,这表示程序并没有真正停止而在后台运行,关于托盘的一点总结,当我们单击鼠标时可以使它在桌面上出现一个最大化窗口;而如果我们单击程序右上角х,或者单击文件菜单中的退出项时程序仍然在托盘上运行;只有我们右键单击托盘图标在出现
本文示例源代码或素材下载
很多软件例如:KV3000等在关闭之后会在托盘区有一个小的托盘图标,这表示程序并没有真正停止而在后台运行。当我们单击鼠标时可以使它在桌面上出现一个最大化窗口;而如果我们单击程序右上角х,或者单击文件菜单中的退出项时程序仍然在托盘上运行;只有我们右键单击托盘图标在出现的菜单中选择退出才能够真正退出程序等。
现在我们通过一个类CSystemTray和修改系统菜单来实现上述功能。
我们先来改变系统菜单。
1、当我们在程序的标题栏上单击鼠标右键时,只出现如图的几项。
而通过MFC生成的还会出现About一项,我们已经把它给去掉了。
我们调用函数GetSystemMenu()来取的系统菜单,然后调用DeleteMenu()来去掉不要的系统菜单项,在这里我们去掉了“关闭”下面的分隔线和“about”项代码如下:
CMenu *pSystemMenu=GetSystemMenu(FALSE);
pSystemMenu->DeleteMenu(8,MF_BYPOSITION);
pSystemMenu->DeleteMenu(7,MF_BYPOSITION);
其中的数字7和8表示系统菜单的第7项和第8项,注意分隔线在VC中也算是一项。(这里和前面所讲的修改系统菜单的方法是一样的)。 当我们去掉“about”这项后就应该在系统命令中也去掉相应的相应代码。我们找到函数OnSysCommand(UINT nID, LPARAM lParam)去掉其中截获about对话框的代码:
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
它对我们没有任何用处,放在这里只能给我们调试带来麻烦。当然如果你不去掉它程序完全没有一点错误。 那么,为什么我们要去掉这两项呢,因为我们准备在托盘中实现相同的功能。 1, 我们再改变程序的关闭标志“X”的功能,把它改为隐藏而不是完全关闭。 我们来截获关闭命令,把它改为隐藏。
更多精彩
赞助商链接