zoukankan      html  css  js  c++  java
  • MFC-一个很简单的程序最小化到托盘,带右键菜单带图标

    例子参考资料:

    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日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:......

    如有问题, 可在底部(留言)咨询.

  • 相关阅读:
    java.security.ProviderException: java.security.KeyException
    DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
    mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
    阿里云composer 镜像
    封装redis操作 php版本
    金钱数友好显示 php版本
    php代码规范->如何写出规范且易于理解的项目代码-ZX版
    hibernate 注解大全
    国家省市区县乡镇三级,五级地址数据
    java基础 数据类型转换
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14683297.html
Copyright © 2011-2022 走看看