如何取托盘窗口

简介:

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

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()
}

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










本文转自 bluebee 51CTO博客,原文链接:http://blog.51cto.com/bluebee/286614,如需转载请自行联系原作者
目录
相关文章
|
存储 编解码 Cloud Native
C++ Qt关于多屏幕窗口处理
C++ Qt关于多屏幕窗口处理
|
C++
201403-2 窗口
201403-2 窗口
85 0
201403-2 窗口
|
区块链
MFC为应用程序添加托盘(右键托盘,弹出菜单)
源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1.       导入一个托盘图标的资源(.ico)格式;资源ID为IDI_ICON1 2.
1310 0
|
SQL 测试技术 流计算
|
API
用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)
网上搜到的答案普遍是VBS无法实现,或者是要用第三方COM(ActiveX?)组件。我对第三方组件是很反感的,使用第三方组件毫无可移植性可言,因为别人的系统中不一定注册了这个组件。我的建议是,尽量不要在VBS代码中调用第三方组件,除非你的程序只是写来自己用。
2281 0
|
C#
c#实现任务栏添加控制按钮
原文:c#实现任务栏添加控制按钮 Windows7Taskbar的使用 你需要引入3个文件VistaBridgeLibrary.dll、Windows7.DesktopIntegration.dll、Windows7.
937 0