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/>

    关于作者:......

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

  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14683297.html
Copyright © 2011-2022 走看看