首页 > 编程语言 > 详细

MFC-一个很简单的程序最小化到托盘,带右键菜单带图标

时间:2021-04-21 10:16:59      阅读:47      评论:0      收藏:0      [点我收藏+]

例子参考资料:

mfc添加托盘图标

https://blog.csdn.net/lwy572039941/article/details/106362967

 

MFC窗口程序启动时最小化到托盘、不在任务栏中显示、显示时在右小角

https://blog.csdn.net/qq_36759433/article/details/103664822?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase

 

[每日一学]MFC学习笔记——自定义消息的使用

https://blog.csdn.net/kingsollyu/article/details/8281654

 

详细操作步骤如下

  • 1.新建基于对话框的MFC项目

技术分享图片

 技术分享图片

选择基于对话框的MFC项目

 技术分享图片

 进来后如下

技术分享图片

  •  2.更改项目为多字节项目

技术分享图片

 技术分享图片

  •  3.添加icon图标到项目中(先自己准备个icon,放到项目文件夹里的res文件夹里)

技术分享图片

 下面代码加载图片

技术分享图片

 技术分享图片

 技术分享图片

 尽量后如下

技术分享图片

 更改图片的名字

技术分享图片

  • 4.创建图标

找到OnInitDialog()初始化函数里写代码

技术分享图片

    //在初始化里写更改对话框图标
    HICON hIcon = AfxGetApp()->LoadIcon(IDI_MY_SMALL_ICON);
    SetIcon(hIcon, FALSE);

    //在OnInitDialog方法中调用
    NOTIFYICONDATA  data;
    data.cbSize = sizeof(NOTIFYICONDATA);//结构体的大小
    data.hWnd = this->m_hWnd;//接收托盘消息的窗口句柄 this是当前dialog
    data.uID = IDI_MY_SMALL_ICON;//定义的托盘图标ID
    data.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;//设置属性,下面的三个属性是否有效
    lstrcpyn(data.szTip, _T("单击右键显示菜单"), sizeof(_T("单击右键显示菜单")));//图标上的提示字符串
    data.uCallbackMessage = WM_ONTRAY;//自定义的消息,
    data.hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_MY_SMALL_ICON));//显示在系统托盘上的图标
    Shell_NotifyIcon(NIM_ADD, &data);// 向任务栏的状态栏发送添加托盘图标的消息
  • 5.设置响应托盘点击事件的方法(自定义消息)

技术分享图片

 技术分享图片

 技术分享图片

 技术分享图片

 编译项目,这个时候可能会编译不过,报错问题如下

技术分享图片

 解决方法

在头文件里加上这一句

技术分享图片

#define WM_ONTRAY WM_USER+0x001

在编译就通过了

技术分享图片

  • 6.添加系统菜单

添加资源

技术分享图片

 技术分享图片

 为菜单栏添加内容

技术分享图片

 在dialog头文件中定义菜单变量

技术分享图片

CMenu menu;

在OnInitDialog()中为菜单变量加载菜单

技术分享图片

  •  7.自定义的响应事件方法实现

技术分享图片

    //响应事件方法实现
    UINT uMouseMsg = (UINT)lParam;
    if (uMouseMsg == WM_RBUTTONDOWN) {
        CMenu* pPopup = menu.GetSubMenu(0);
        CPoint point;
        GetCursorPos(&point);
        pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_VERTICAL,
            point.x, point.y, AfxGetApp()->m_pMainWnd, TPM_LEFTALIGN);
    }

    if (uMouseMsg == WM_LBUTTONDBLCLK) {  //双击鼠标 
        ShowWindow(SW_SHOWNOACTIVATE);    //恢复窗口的显示
    }
  • 8.为菜单上的按钮添加事件

技术分享图片

 技术分享图片

 添加代码

技术分享图片

    //给窗口发送消息还原成原来大小
    SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0);

给退出按钮也加一下

技术分享图片

 技术分享图片

    //给窗口发送消息关闭
    SendMessage(WM_CLOSE, 0, 0);
  • 9.设置点击关闭按钮 执行最小化命令

找到OnSysCommand函数,添加如下代码

技术分享图片

    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else if (nID == SC_MINIMIZE)//最小化,把他隐藏起来 
    {
        this->ShowWindow(SW_HIDE); 
    }
    else if (nID == SC_CLOSE)//最小化,把他隐藏起来 
    {
        this->ShowWindow(SW_HIDE); 
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }

到这个程序就写完了

演示如下

技术分享图片

 

程序员阿飞

2021年4月20日

MFC-一个很简单的程序最小化到托盘,带右键菜单带图标

原文:https://www.cnblogs.com/nxopen2018/p/14683297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!