如何取托盘窗口- 蓝蜂- 51CTO技术博客

  有朋友在工作中需要得到托盘窗口,请我帮忙,于是我就简单地写下来了。想想或许对大家有帮助,所以我就转到这里来,但愿能帮到你。

CWnd* GetTrayWindow()
{
    CWnd* pTrayWnd = CWnd::FindWindow(_T("Shell_TrayWnd"), NULL);
    if(pTrayWnd != NULL)
    {
        CWnd* pNotifyWnd = CWnd::FindWindowEx(pTrayWnd->m_hWnd, NULL, _T("TrayNotifyWnd"), NULL);
        if(pNotifyWnd != NULL)
        {
            CWnd* pSysPager = CWnd::FindWindowEx(pNotifyWnd->m_hWnd, NULL, _T("SysPager"), NULL);
            if(pSysPager != NULL)
            {
                return CWnd::FindWindowEx(pSysPager->m_hWnd, NULL, _T("ToolbarWindow32"), NULL);
            }

            return  CWnd::FindWindowEx(pNotifyWnd->m_hWnd, NULL, _T("ToolbarWindow32"), NULL);
        }
    }

    return NULL;
}

 

为了验证得到的窗口是否是自己需要的,写一个测试小程序,把得到的内容绘制出来看看(其它代码省略)。

void CChildView::OnPaint()
{
    CPaintDC dc(this); // 用于绘制的设备上下文
   
    CWnd* pToolbarWindow = GetTrayWindow();
    if(pToolbarWindow != NULL)
    {
        CRect rect;
        pToolbarWindow->GetClientRect(&rect);

        CClientDC dcWin(pToolbarWindow);
        dc.BitBlt(100, 100, rect.Width(), rect.Height(), &dcWin, 0, 0, SRCCOPY);
    }           
   
    // 不要为绘制消息而调用 CWnd::OnPaint()
}

如果代码可以正常工作并能帮到你,这段代码是我自己写的。如果不能正常工作,对不起,我也不知道是谁写的。

本文出自 “” 博客,请务必保留此出处





郑重声明:资讯 【如何取托盘窗口- 蓝蜂- 51CTO技术博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——