系统托盘图标操作

// 将图标放入系统托盘
    NOTIFYICONDATA nd;
    nd.cbSize = sizeof (NOTIFYICONDATA);
    nd.hWnd = m_hWnd;
    nd.uID = IDI_UNLOCK; //图标资源名称
    nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
    nd.uCallbackMessage = WM_NOTIFYICON;
    nd.hIcon = m_hIcon;
    CString str = _T("ZZZZ") ;//鼠标移动到图标时显示的名称
    wcscpy(nd.szTip, str.GetBuffer());

    Shell_NotifyIcon(NIM_ADD, &nd);//向任务栏的状态栏添加一个图标


ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)

LRESULT CXXXDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
    // 响应在托盘图标上的单击
    switch(lParam)
    {
        case WM_LBUTTONDOWN:
        case WM_LBUTTONDBLCLK:
            {
                ShowWindow(SW_SHOWNORMAL); 
            }break ;
        case WM_RBUTTONDOWN:
            {
                CMenu oMenu;
                if (oMenu.LoadMenu(IDR_MENU1))        
                {
                    CMenu* pPopup = oMenu.GetSubMenu(0);
                    ASSERT(pPopup != NULL);
                    CPoint oPoint;
                    if (IsWindowVisible())// 根据对话框窗口的显示/隐藏状态修改菜单名称
                        oMenu.ModifyMenu(ID_SHOW,MF_STRING,ID_SHOW,_T("隐藏"));
                    else
                        oMenu.ModifyMenu(ID_SHOW,MF_STRING,ID_SHOW,_T("显示"));
                    // 确定鼠标位置以便在该位置附近显示菜单
                    GetCursorPos( &oPoint );
                    SetForegroundWindow();
                    pPopup->TrackPopupMenu(
                        TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                        oPoint.x, oPoint.y, this); 
                }
            }break ;
    }
    return 0 ;
}

//删除托盘图标

BOOL CXXXDlg::OnQueryEndSession()
{
    // TODO:  在此添加专用的查询结束会话代码
    // 将图标从系统托盘中删除
    NOTIFYICONDATA nc;//此结构体包含用来传递托盘消息的信息
    nc.cbSize=sizeof(NOTIFYICONDATA);//结构体大小
    //放置在托盘区的图标句柄
    nc.hIcon=m_hIcon ;
    nc.hWnd=m_hWnd;//窗体句柄
    nc.uCallbackMessage=WM_NOTIFYICON;//托盘区域发生事件时触发本消息
    //制定结构体中有效的属性(NIF_ICON,NIF_MESSAGE,NIF_TIP)
    nc.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
    nc.uID=IDI_UNLOCK;//托盘图标的标示符
    Shell_NotifyIcon(NIM_DELETE,&nc);//向托盘区域发送消息,删除图标   

    return TRUE;
}

void CXXXDlg::OnClose()

{

           OnQueryEndSession() ;
            CDialog::OnClose();

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值