在实际操作电脑的过程中,我们常常可以看到一些应用程序可以最小化到桌面右下角的托盘中显示,如一些杀毒软件等开机就显示在托盘中,或是我们常用的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. xtu数据结构 B. Get Many Persimmon Trees

    B. Get Many Persimmon Trees Time Limit: 1000ms Memory Limit: 30000KB 64-bit integer IO format: %lld  ...

  2. Java面向对象三大特征

    封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:人{ 年龄 ...

  3. BZOJ 4259 残缺的字符串 ——FFT

    [题目分析] 同bzoj4503. 只是精度比较卡,需要试一试才能行O(∩_∩)O 用过long double,也加过0.4.最后发现判断的时候改成0.4就可以了 [代码] #include < ...

  4. 算法复习——LCA模板(POJ1330)

    题目: Description A rooted tree is a well-known data structure in computer science and engineering. An ...

  5. 625. Minimum Factorization

    Problem statement Given a positive integer a, find the smallest positive integer b whose multiplicat ...

  6. PHP中使用GD库方式画时钟

    <!--demo.html中内容--> <body> <img id="time" src="test.php" /> &l ...

  7. Nk 1430 Divisors(因子数与质因数)

    Time Limit: 5000 ms    Memory Limit: 10000 kB   Total Submit : 432 (78 users)   Accepted Submit : 10 ...

  8. Codeforces 432D Prefixes and Suffixes kmp

    手动转田神的大作:http://blog.csdn.net/tc_to_top/article/details/38793973 D. Prefixes and Suffixes time limit ...

  9. [转]UITableView全面解析

      转自:http://www.cnblogs.com/kenshincui/p/3931948.html#mvc 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软 ...

  10. dedecms--需要注意的细节

    在系统的系统配置参数里面修改一些参数 1:站点设置: (1):站点根网址:本地测试的话:就是你设置的虚拟主机:http://www.abc.cc (2):网页主页链接:为空 2:核心设置: DedeC ...