在实际操作电脑的过程中,我们常常可以看到一些应用程序可以最小化到桌面右下角的托盘中显示,如一些杀毒软件等开机就显示在托盘中,或是我们常用的QQ等聊天工具,都可以最小化在托盘中,如图-1。

在图-1中,可以看到第一个服务器样式的图标,那个就是我编写的服务器程序最小化在托盘中的显示。其实很简单,只要在程序中加几行代码就可以了。我主要就MFC中基于Dialog对话框的程序作一下简单的介绍。以下是基本步骤:

1、首先建立一个基于对话框的MFC程序;

2、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉;

3、在自己的Dialog头文件中定义一个变量  NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN;

4、添加消息响应函数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);                // 在托盘区添加图标

这时候编译,会报WM_SHOWTASK的错,因为该消息要自己定义。

5、在Dialog头文件中声明消息函数原型

LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);

6、在Dialog源文件中进行消息映射

ON_MESSAGE(WM_SHOWTASK,OnShowTask)

7、在Dialog源文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

LRESULT CServerDlg::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;

}

8、添加OnSize消息响应函数,处理最小化时的操作。

void CServerDlg::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); // 当最小化市,隐藏主窗口

}

}

9、添加关闭窗口时的消息响应函数,将托盘中的应用程序图标删除

BOOL CServerDlg::DestroyWindow()

{

// TODO: Add your specialized code here and/or call the base class

// 在托盘区删除图标

Shell_NotifyIcon(NIM_DELETE, &m_nid);

return CDialog::DestroyWindow();

}

经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出菜单进行相应的操作。

VC最小化到托盘程序的更多相关文章

  1. vc++ 最小化到托盘的详细实现

    在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 1.声明一个NOTIFYICONDATA类,也就是NOTIFYICOND ...

  2. VC++ 最小化到托盘、恢复

    所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分.在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区. 一.托盘编程相关函数   ...

  3. C++ 最小化到托盘

    #define WM_SHOWTASK (WM_USER + 1) void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID &a ...

  4. (WinForm)文件夹状态监控,最小化到托盘,开机自启动

    原文 (WinForm)文件夹状态监控,最小化到托盘,开机自启动 . 文件夾監控(監測文件夾中的文件動態): //MSDN上的例子 public class Watcher { public stat ...

  5. 【VS开发】最小化到托盘 shell_notifyicon和NOTIFYICONDATA

    shell_notifyicon和NOTIFYICONDATA Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息 函数原型 BOOL Shell_NotifIcon( DWORD d ...

  6. 将VMware虚拟机最小化到托盘栏

    版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可.   目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayco ...

  7. 将VMware工作站最小化到托盘栏

    目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayconizerw.zip 3.创建 VMware 快捷方式 4.修改 VMware 快捷方式 5.运 ...

  8. WPF实现窗口最小化到托盘,并且实现右击菜单

    原版是从网上找了一位大神的,自己只是用了一点适合自己的. 具体实现 1.首先已经确认WPF中没有实现最小化托盘的类与方法,用到了winform中的程序集 using Drawing = System. ...

  9. outlook新邮件到达提醒设置以及outlook最小化到托盘设置

    有些邮件是需要马上处理的,因此希望能在收到邮件之后马上就知道,但是有不希望频繁的去检查有没有.outlook可以帮我们轻松做到新邮件到达提醒. 一 .设置outlook新邮件到达提醒:选项->电 ...

随机推荐

  1. windows下的host工作原理

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...

  2. nginx反向代理+负载均衡+https

    A服务器(192.168.133.1)作为nginx代理服务器 B服务器(192.168.133.2)作为后端真实服务器 访问https://www.test.com请求从A服务器上反向代理到B服务器 ...

  3. log日志,crontab

    定期备份mysql的log日志文件,保留一个月 将文件压缩为gzip格式,节省空间,备份到/home/shell/myqsl_back/目录下,保留一个月mysql_backup备份的脚本 #!/bi ...

  4. BZOJ 2140 稳定婚姻 ——二分图

    论二分图的可行边与必须边. 考虑用dinic增广之后的图,一些是必要的割边,一些是可行的割边. 我们首先求出一组可行的最大匹配,那么这些变都是可行的. 然后我们求一遍强连通分量. 如果 scc[u]! ...

  5. 小机房的树(codevs 2370)

    题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...

  6. 【CF659F】Polycarp and Hay(并查集,bfs)

    题意: 构造一个矩阵,使得: 矩阵所有格子中数字都小于等于原矩阵,并且至少有一个元素和原矩阵相等, 构造的矩阵除了0以外的数字必须联通并且相等,矩阵中元素之和为K. n,m<=1e3,1< ...

  7. 解决U3D4.1.5或以上无法启动MONODEV的方法

    通常会报这样的错误 System.EntryPointNotFoundException: Unable to find an entry point named 'gtksharp_list_get ...

  8. Laravel 5.1 报错:[App\Http\Requests\Request] is not instantiable

    Laravel 5.1 报错:[App\Http\Requests\Request] is not instantiable 错误提示: Whoops, looks like something we ...

  9. linux的内存性能评估

    linux的内存性能评估 参考自:自学it网,http://www.zixue.it/. (1)使用free指令监控内存,参数-m以M为单位显示,-h人性化显示单位. [test@localhost ...

  10. android的网络访问URL

    Thread visitBaiduThread = new Thread(new VisitWebRunnable());     visitBaiduThread.start();     try ...