zoukankan      html  css  js  c++  java
  • VC最小化到托盘程式

    参考文章:http://www.cnblogs.com/zhangpengshou/archive/2009/07/11/1520819.html

    基本上是按照这篇文章所写的方法来做的,只有稍许改动。

    在VC6.0下实现的步骤如下:

    一、创建基于对话框的MFC程式

    二、导入一图标ICON,ID设为IDI_TRAY

    三、为新建的对话框类添加成员变量 NOTIFYICONDATA    m_nid;

    四、自定义消息,后面会用到。#define   WM_SHOWTASK   WM_USER+100

    五、在OnInitDialog()对话框初始化函数中添加如下代码

    1     // TODO: Add extra initialization here  
    2 m_nid.cbSize = sizeof(m_nid);
    3 m_nid.hWnd = this->GetSafeHwnd(); //自定义消息发送的窗口
    4 m_nid.hIcon = AfxGetApp()->LoadIcon(IDI_TRAY); //导入的ICON,在托盘中显示
    5 m_nid.uCallbackMessage = WM_SHOWTASK; //自定义的消息
    6 m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    7 m_nid.uID = 100; /*WM_SHOWTASK*/ //ID,好像随便定个值就OK了
    8 _tcscpy(m_nid.szTip, TEXT("TrayDlg")); //信息提示条
    9 Shell_NotifyIcon(NIM_ADD, &m_nid); //在托盘区添加图标

    六、在新建的对话框类中添加消息响应函数

    1 afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam); 
    2 //}}AFX_MSG
    3 DECLARE_MESSAGE_MAP()

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

    1 BEGIN_MESSAGE_MAP(CTrayDlgDlg, CDialog)  
    2 //{{AFX_MSG_MAP(CTrayDlgDlg)
    3 ON_WM_SYSCOMMAND()
    4 ON_WM_PAINT()
    5 ON_WM_QUERYDRAGICON()
    6 ON_MESSAGE(WM_SHOWTASK, OnShowTask)
    7 //}}AFX_MSG_MAP
    8 END_MESSAGE_MAP()

    八、实现消息响应函数

     1 LRESULT CTrayDlgDlg::OnShowTask(WPARAM wParam, LPARAM lParam)  
    2 {
    3 switch(lParam)
    4 {
    5 case WM_RBUTTONUP: //右键弹时弹出菜单
    6 {
    7 CPoint pnt;
    8 ::GetCursorPos(&pnt); //得到鼠标位置
    9 CMenu menu;
    10 menu.CreatePopupMenu(); //声明一个弹出式菜单
    11 menu.AppendMenu(MF_STRING, WM_DESTROY, "关闭");
    12 menu.TrackPopupMenu(TPM_LEFTALIGN, pnt.x, pnt.y, this);
    13 HMENU hmenu = menu.Detach();
    14 menu.DestroyMenu();
    15 }
    16 break;
    17 case WM_LBUTTONDBLCLK: //双击左键的处理
    18 {
    19 this->ShowWindow(SW_SHOWNORMAL); //显示主窗口
    20 //this->ShowWindow(SW_SHOW); //注意SW_SHOW与SW_SHOWNORMAL的区别
    21 }
    22 break;
    23 }
    24 return 0;
    25 }

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

    1 BOOL CTrayDlgDlg::DestroyWindow()   
    2 {
    3 // TODO: Add your specialized code here and/or call the base class
    4 Shell_NotifyIcon(NIM_DELETE, &m_nid); // 在托盘区删除图标
    5 return CDialog::DestroyWindow();
    6 }

    OK了。。。。。。。。





  • 相关阅读:
    JS中的call_user_func封装
    js中insertAdjacentHTML的玩法
    小tip: DOM appendHTML实现及insertAdjacentHTML
    js获取和设置属性的方法
    安装Yeoman,遇到的问题
    HTML中Select的使用详解
    jQuery Ajax异步处理Json数据详解
    chrome浏览器Uncaught TypeError: object is not a function问题解决
    SpringBoot Web实现文件上传下载功能实例解析
    SpringMVC Web实现文件上传下载功能实例解析
  • 原文地址:https://www.cnblogs.com/Hisin/p/2372585.html
Copyright © 2011-2022 走看看