VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。

托盘上的菜单右键弹出后,然后再别的地方,比如桌面,菜单无法隐藏掉,一直在托盘上,除非操作下菜单才能隐藏掉,只需要加上一句话

::SetForegroundWindow(m_nid.hWnd); 

就可以解决这个问题。


下面是托盘创建

class CXXXDlg
{

private:
NOTIFYICONDATA     m_trayid;        //作为托盘ID
};

//创建托盘
void CXXXDlg::CreateTray(HICON icon)
{
	m_trayid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
	m_trayid.hWnd = this->m_hWnd;
	m_trayid.uID = 128;
	m_trayid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
	m_trayid.uCallbackMessage = UM_SHOW_THIRDBIND;
	m_trayid.hIcon = icon;

	wcscpy_s(m_trayid.szTip, _T("我是托盘"));
	Shell_NotifyIcon(NIM_ADD, &m_trayid);
}
//显示托盘tooltip
void CXXXDlg::ShowTrayTooltip()
{
    m_trayid.cbSize=sizeof(NOTIFYICONDATA);
    m_trayid.uFlags = NIF_INFO;
    m_trayid.uVersion = NOTIFYICON_VERSION;
    m_trayid.uTimeout = 5000;
    m_trayid.dwInfoFlags = NIIF_INFO;
    wcscpy_s(m_trayid.szInfoTitle, L"提示" );                  //气泡标题
    wcscpy_s(m_trayid.szInfo, L"我是托盘tooltip");             //气泡内容
    Shell_NotifyIcon( NIM_MODIFY, &m_trayid);
}

LRESULT   CXXXDlg::onShowTask(WPARAM    wParam,LPARAM    lParam)   //托盘响应消息     
{     
    if(wParam !=128)      
        return    1; 

    switch(lParam)       
    { 
    case    WM_RBUTTONUP:      
        {   

            ::SetForegroundWindow(m_nid.hWnd);                    //点击别的地方,托盘隐藏
            LPPOINT    lpoint=new    tagPOINT;     
            ::GetCursorPos(lpoint); 
            m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, lpoint->x, lpoint->y, this); 
            delete   lpoint;
            break;
        }      
    case   WM_LBUTTONDBLCLK:   
        {     
            this->ShowWindow(SW_SHOW);
            SetForegroundWindow();
        }   
        break;     
    } 
    return    0;  
}


posted @   奥雷连诺  阅读(665)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示