MFC基于对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能

对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能


集成环境为VS2013

一、将对话框最小化到托盘


1.首先对话框属性保证可最小化,对话框”Minimize Box”为TRUE。
2.添加WM_SIZE消息,并添加条件语句:
void CIndustrialDisplayDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialogEx::OnSize(nType, cx, cy);
    // TODO:  在此处添加消息处理程序代码
    if (nType == SIZE_MINIMIZED)
    {
    ShowWindow(SW_HIDE);//窗口隐藏
    }
}
3.在托盘区添加图标
    //最下化到托盘
void CIndustrialDisplayDlg::toTray()//最小化到托盘
{
    NOTIFYICONDATA nid;
    nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd = this->m_hWnd;
    nid.uID = IDI_ICON1;        //自绘的图标
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称  
    nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
    strcpy(nid.szTip, "显示屏显示");//信息提示条为“OA”  
    Shell_NotifyIcon(NIM_ADD, &nid);//在托盘区添加图标  
}  
4.在托盘区删除图标
//摧毁托盘
void CIndustrialDisplayDlg::DeleteTray()//销毁托盘图标
{
    NOTIFYICONDATA nid;
    nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd = this->m_hWnd;
    nid.uID = IDI_ICON1;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = WM_SHOWTASK;
    nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
    strcpy(nid.szTip, "显示屏显示");
    Shell_NotifyIcon(NIM_DELETE, &nid);
}
5.在需要的位置写入调用:
    PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);   // 自动托盘
    toTray();
    ShowWindow(SW_HIDE);

二、鼠标右键添加菜单以及对应菜单功能


1.添加菜单 IDR_MENU_TRAY
2.添加消息
a) 在头文件中添加:
#define WM_SHOWTASK     WM_USER + 100 //定义消息的值  
b) 在源文件中xxxDlg.cpp添加消息
ON_MESSAGE(WM_SHOWTASK, OnShowTask)
3.添加函数:
a) 在头文件xxxDlg.h中添加声明
afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);  
b) 在源文件中xxxDlg.cpp添加函数
LRESULT CIndustrialDisplayDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{

    if (wParam != IDI_ICON1)
        return 1;
    switch (lParam)
    {
    case WM_RBUTTONUP:                                        // 右键起来时弹出菜单
    {
        CPoint point;
        ::GetCursorPos(&point);
        CMenu menu;
        menu.LoadMenu(IDR_MENU_TRAY);
        CMenu* pSubMenu = menu.GetSubMenu(0);
        menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
    }

    break;
    case WM_LBUTTONDBLCLK:                                 // 双击左键的处理
    {
        this->ShowWindow(SW_SHOWNORMAL);         // 显示主窗口
    }
    break;
    }
    return 0;
}
4.还原对话框
this->ShowWindow(SW_SHOWNORMAL);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值