zoukankan      html  css  js  c++  java
  • 将应用程序放入托盘(MFC)

    一、简介:

    使程序托盘我们这里要用到了一个结构体NOTIFYICONDATA,它包含了系统需要用来传递托盘区域信息的消息;还有需要用到一个函数Shell_NotifyIcon,它的作用是对拖盘图标进行显示与删除。

    NOTIFYICONDATA结构如下:

    STRUCT NOTIFLYICONDATA
    {
        cbSize                 //结构体的大小,以字节为单位
        hIcon                  //任务栏上显示的图标
        hWnd                   //窗口句柄
        uCallbackMessage       //自义定消息处理,当你对托管图标操作时,响应这消息
        uFlags                 //作用标识,比如你想让图标起作用可以用NIF_ICON ,想显示提标信息可用NIF_TIP
        uID                    //图标ID
        szTip                  //鼠标放上去的提示信息
    };

    二、具体实现步骤:

    1、定义NOTIFYICONDATA对象,

    private:
        NOTIFYICONDATA nid;

    2、初始化对象

    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
    nid.hWnd=this-> m_hWnd; 
    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, _T("xxx"));//信息提示条 
    Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

    3、自定义用户消息、并添加回调函数

    #define WM_SHOWTASK (WM_USER + 100)
    afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);
    LRESULT CQueueServerDlg::OnShowTask(WPARAM wParam,LPARAM lParam) //wParam是图标的ID,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, "Close"); //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏)将程序结束。 
                    SetForegroundWindow();     
                    menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单的位置
                    HMENU   hmenu=menu.Detach();  //资源回收 
                    menu.DestroyMenu(); 
                    delete   lpoint; 
            } 
            break; 
            case WM_LBUTTONDBLCLK:
            { 
                this-> ShowWindow(SW_SHOW);
            } 
            break; 
            case  WM_LBUTTONDOWN:
                this-> ShowWindow(SW_SHOW);
                break;
        } 
        return   0; 
    }

    4、添加消息映射

    BEGIN_MESSAGE_MAP(CSSDlg, CDialog)
    
     ON_MESSAGE(WM_SHOWTASK, &CQueueServerDlg::OnShowTask)
     
    END_MESSAGE_MAP()

    5、最后在OnDestroy函数删除托盘图标。

    Shell_NotifyIcon(NIM_DELETE,&nid);
  • 相关阅读:
    Pytorch多进程最佳实践
    torchvision简介
    Pytorch数据变换(Transform)
    Pytorch自定义数据库
    DenseNet笔记
    Focal Loss笔记
    Pytorch数据读取框架
    二叉树的先序、中序、后序递归与非递归实现遍历
    Group Normalization笔记
    sap 怎么导出sap的各种表
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/14146787.html
Copyright © 2011-2022 走看看