MFC窗口实现最小化到托盘 右键菜单和还原

//.h文件

void toTray();//最小化到托盘

void DeleteTray();//删除托盘图标

afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//图标恢复

//.cpp文件

define WM_SHOWTASK (WM_USER +1)

define IDR_SHOW 11

define IDR_OTHER 12

define IDR_EXIT 13

BEGIN_MESSAGE_MAP()

...

ON_MESSAGE(WM_SHOWTASK,OnShowTask)//消息映射

END_MESSAGE_MAP()

void ScheduleDlg::toTray()//最小化到托盘

{

    NOTIFYICONDATA nid; 

    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,"OA");//信息提示条为“OA” 

    Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标 

    ShowWindow(SW_HIDE);//隐藏主窗口

}

LRESULT ScheduleDlg::OnShowTask(WPARAM wParam, LPARAM lParam)

{//wParam接收的是图标的ID,而lParam接收的是鼠标的行为

    if(wParam != IDR_MAINFRAME) return 1;

    switch (lParam)

    {

    case WM_LBUTTONUP://左键单击显示主界面

        {

            this->ShowWindow(SW_SHOW);

            SetForegroundWindow();

            DeleteTray();

        }break;

    case WM_RBUTTONUP://右击弹出菜单

        {

            LPPOINT lpoint = new tagPOINT;

            ::GetCursorPos(lpoint);//得到鼠标位置

            CMenu menu;

            menu.CreatePopupMenu();

            menu.AppendMenu(MFT_STRING, IDR_SHOW, "打开主界面");

            menu.AppendMenu(MFT_STRING, IDR_OTHER, "其他");

            menu.AppendMenu(MFT_STRING, IDR_EXIT, "退出");

            SetForegroundWindow();

            EnableMenuItem(menu,IDR_OTHER,MF_GRAYED);//"其他"菜单变灰

            //menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x,lpoint->y,this);//显示菜单

            int xx=TrackPopupMenu(menu,TPM_RETURNCMD,lpoint->x,lpoint->y,NULL,this->m_hWnd,NULL);//显示菜单并获取选项ID

            if(xxIDR_SHOW)

            {

                this->ShowWindow(SW_SHOW);

                SetForegroundWindow();

                DeleteTray();

            }

            else if(xxIDR_OTHER) {MessageBox("你点击了“其他”菜单","提示",MB_OK);}

            else if(xx==IDR_EXIT) {OnBnClickedCancel();}

            HMENU hmenu = menu.Detach();

            menu.DestroyMenu();

            delete lpoint;

        }break;

    case WM_LBUTTONDBLCLK:

        {

            //双击不处理

        }break;

    }

    return 0;

}

void ScheduleDlg::DeleteTray()//销毁托盘图标

{

    NOTIFYICONDATA nid;

    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,"OA");

    Shell_NotifyIcon(NIM_DELETE, &nid);

}

MFC添加图标到托盘的更多相关文章

  1. [MFC] 如何更改MFC程序图标

    方法一: >_<:找一张ICO图标,替换programname/res/programname.ico文件,就可以啦,这时候你运行后得到的图标可能还是原来MFC的默认图标,这时候你只要把工 ...

  2. 如何修改MFC的图标

    原文:如何修改MFC的图标 修改左上角的图标和任务栏里图标 在对话框构造函数中 CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestD ...

  3. 在Linux(Luna)下向Launch启动器中添加图标

    记录下在Luna下向Launch中添加图标的步骤,以供以后参考,这里我以加入eclipse图标为例: 首先,我们来创建一个desktop文件(Luna中到启动器Launch可以看作是Ubuntu中到桌 ...

  4. 为网站文字前面添加图标 在线调用 Font Awesome 字体icon小图标 美化网站

    一.如何开始 1.将下面的代码复制粘贴到HTML页面面的 <head> 下面 <link rel="stylesheet" href="https:// ...

  5. Qt 程序和窗口添加图标

    Qt项目在打包发布之后都需要有个个性的程序图标和窗口图标,这样会使程序更加美观大方,下面我们分别来看如何给程序和窗口分别添加图标.我们需要两种格式的图片,一种是.ico的,用来给程序添加图标,一种是. ...

  6. iOS中为网站添加图标到主屏幕以及增加启动画面

    虽然没有能力开发Native App,但还是可以利用iOS中Safari浏览器的特性小小的折腾一下,做一个伪Web App满足下小小的虚荣心的. 既然是在iOS中的Safari折腾的,那么代码中利用到 ...

  7. ExtJS 添加图标icon

    extjs控件有两个属性:一个是iconCls:另一个是icon.通过这两个属性可以对控件添加图标 1.直接引用图标路径 icon: '../icons/application_view_detail ...

  8. Extended ComboBox添加图标

    Extended ComboBox添加图标 关键点 实现过程 // MFC02Dlg.h : header fileCImageList m_imageList;  // MFC02Dlg.cpp : ...

  9. Delph控制台(Console)程序添加图标和版权信息

    Delphi创建控制台(Console)程序默认是无法添加图标和版权的.经过仔细的对比窗体程序与控制台程序源码,发现窗体程序的工程文中,在uses结束begin开始的地方有一句如下代码:{$R *.r ...

  10. weex 学习: 添加图标(使用阿里吧吧-icon)

    添加图标(使用阿里吧吧-icon) <text slot="left" class="header-left"></text>   i ...

随机推荐

  1. vue3.4的更新,保证你看的明明白白

    defineModel 同学已经转正 defineModel 在vue3.3中还是一个实验性功能, 但是经过一个学期的努力,该同学已经转正. defineModel的简单介绍 defineModel( ...

  2. 一些自托管(self hosted)服务的使用笔记

    opengrok oracle的opengrok是一个项目代码查找工具,自建索引,类似工具有source insight 官方已经提供好了docker镜像,傻瓜式安装.不过增加新的项目源码时需要手动更 ...

  3. Android/SELinux 添加 AVC 权限

    Android/SELinux 添加 AVC 权限 背景 在Android应用层中编写c/c++应用时,发现接口调用出现问题,logcat才知道是因为:权限不够. type=1400 audit(0. ...

  4. 使用bootchart 对 高通Android 进行性能分析

    使用bootchart 对 高通Android 进行性能分析 Android版本:7.0 适用平台:高通和MTK 参考: https://blog.csdn.net/qq_19923217/artic ...

  5. 【论文阅读】TRO2022: A Two-Stage Optimization-Based Motion Planner for Safe Urban Driving

    TRO2022: A Two-Stage Optimization-Based Motion Planner for Safe Urban Driving Summary: 探讨planning过程中 ...

  6. SpringBoot实现RequestBodyAdvice和ResponseBodyAdvice接口

    Spring Boot 提供了一种机制,允许开发者在请求体(RequestBody)和响应体(ResponseBody)被处理之前和之后执行自定义逻辑.这通过 RequestBodyAdvice 和 ...

  7. VUE商城项目 -商品列表功能 - 手稿

  8. 深入解析 Vue Router:构建单页面应用的利器

    Vue.js 是一个渐进式 JavaScript 框架,常用于构建用户界面.随着应用的复杂度增加,路由(Routing)变得越来越重要,这就是 Vue Router 的用武之地.Vue Router ...

  9. UE5 射线检测排除隐藏的Actor

    0x00 Unreal Engine 5(UE5)以其卓越的性能和直观的开发工具在游戏开发领域占据了重要地位.本系列将深入探讨UE5中射线检测的关键概念,着重介绍处理隐藏Actor的技巧. 0x01. ...

  10. OffscreenCanvas-离屏canvas使用说明

    OffscreenCanvas 是一个实验中的新特性,主要用于提升 Canvas 2D/3D 绘图的渲染性能和使用体验.OffscreenCanvas 的 API 很简单,但是要真正掌握好如何使用. ...