MFC 托盘实现

头文件.h 中:

public:

    // 声明消息响应函数,用于程序托盘后再次显示主窗口

    afx_msg LRESULT onShowTask(WPARAM wParam, LPARAM lParam);

    // 实现程序托盘的函数

    afx_msg void ToTray();

 

 

源文件.cpp 中:

//  自定义消息,用于程序托盘后,鼠标点击图标消息事件

#define WM_SHOWTASK (WM_USER+1001)

// 定义一个全局结构变量

NOTIFYICONDATA nid;

 

// 添加程序托盘后,鼠标点击图标消息事件消息映射

    ON_MESSAGE(WM_SHOWTASK, onShowTask)

BEGIN_MESSAGE_MAP(CAAAAADlg, CDialog)
 //{{AFX_MSG_MAP(CAAAAADlg)
 ON_MESSAGE(WM_SHOWTASK, onShowTask)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

// 

 

//托盘的函数

void CMyTrayProDlg:: 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, _T("我的计划任务提醒")); // 信息提示条为“我的计划任务提醒”

    memset(nid.szTip, 0, sizeof(nid.szTip));

    memcpy(nid.szTip, _T("我的计划任务提醒"), sizeof(_T("我的计划任务提醒")));

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

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

}

 

// 用于程序托盘后,鼠标点击图标消息事件

LRESULT CMyTrayProDlg::onShowTask(WPARAM wParam, LPARAM lParam)

{

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

    if (IDR_MAINFRAME != wParam)

    {

        return 1;

    }

 

// 判断鼠标行为

    switch (lParam)

    {

    case WM_RBUTTONUP:  // 右键起来时弹出快捷菜单,这里只有一个"关闭"

        {

            LPPOINT lpoint = new tagPOINT;

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

            CMenu menu;

            menu.CreatePopupMenu(); // 声明一个弹出式菜单

            // 增加菜单项"关闭",点击则发送消息WM_DESTROY 给主窗口(已隐藏),将程序结束

            menu.AppendMenu(MF_STRING, WM_DESTROY, _T("关闭"));

            // 确定弹出式菜单的位置

            menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y, this);

            // 资源回收

            HMENU hmenu = menu.Detach();

            menu.DestroyMenu();

            Shell_NotifyIcon(NIM_DELETE, &nid);  // 在托盘区删除图标

 

            delete lpoint;

        }

        break;

    case WM_LBUTTONUP:  // 左键点击处理

    case WM_LBUTTONDBLCLK:  // 双击左键处理

        {

            this->ShowWindow(SW_SHOW);  // 简单的显示主窗口

        }

        break;

    default:

        break;

    }

 

    return 0;

}

void CMyTrayProDlg::OnOK()
{
 // TODO: Add extra validation here
ToTray();

// CDialog::OnOK();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值