• 12686阅读
  • 9回复

QT怎么把窗口嵌入桌面??? [复制链接]

上一主题 下一主题
离线sd菜
 
只看楼主 倒序阅读 楼主  发表于: 2010-09-12
— 本帖被 XChinux 执行加亮操作(2010-09-21) —
我在网上找了很久,方法挺少的,我照着做了,但是不行啊,我做了一个类似便条贴的东西,一共就俩窗口(其中一个子窗口是弹出的警告窗口),我的问题是想把他嵌入到桌面,该怎么弄啊???
离线sd菜
只看该作者 1楼 发表于: 2010-09-17
怎么没有人回答啊?????5555555555,大家帮帮我吧,,,,,我只知道大概思路就是用一个指针指向桌面,然后在窗体构造函数里setParent过去就可以了,但是具体的我不知道怎么弄啊??????????
离线roywillow

只看该作者 2楼 发表于: 2010-09-17
我记得有个QApplication::desktop()
尝试用这个看看能不能返回桌面的指针?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线kenter1643
只看该作者 3楼 发表于: 2010-09-23
最后怎么样了???
离线liuqin820222

只看该作者 4楼 发表于: 2011-02-10
楼上最后实现没,怎么实现的?
离线kimtaikee

只看该作者 5楼 发表于: 2011-02-10
类似便条贴这样的东西,你让它前端显示不就行了吗 ?

离线cycloneii

只看该作者 6楼 发表于: 2011-02-10
引用第2楼roywillow于2010-09-17 18:25发表的  :
我记得有个QApplication::desktop()
尝试用这个看看能不能返回桌面的指针?

用win32 API可以,但是用QApplication::desktop()不行
我以前试过,好像是可以去qt widget的winid(在windows平台下就是句柄),然后用WIN32 API取桌面的句柄,再用win32 api在这两个句柄间建立父子关系。用QApplication::desktop()得到的winid和WIN32 API取出来的句柄值不一样
离线hicjiajia

只看该作者 7楼 发表于: 2011-02-13
理论:
0、#include <windows.h>
1、调用Win32 API获取桌面句柄,通过QWidget::winId()获得窗口句柄
2、调用Win32 API设置两窗口父子关系

实践:
在头文件私有部分加入函数声明:
static BOOL enumUserWindowsCB(HWNDhwnd,LPARAMlParam);   //静态全局函数
HWND findDesktopIconWnd();

函数实现:

BOOL Widget::enumUserWindowsCB(HWND hwnd,LPARAM lParam)
{
    long wflags = GetWindowLong(hwnd, GWL_STYLE);
    if(!(wflags & WS_VISIBLE)) return TRUE;

    HWND sndWnd;
    if( !(sndWnd=FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL)) ) return TRUE;
    HWND targetWnd;
    if( !(targetWnd=FindWindowEx(sndWnd, NULL, L"SysListView32", L"FolderView")) ) return TRUE;

    HWND* resultHwnd = (HWND*)lParam;
    *resultHwnd = targetWnd;
    return FALSE;
}


HWND Widget::findDesktopIconWnd()
{
    HWND resultHwnd = NULL;
    EnumWindows((WNDENUMPROC)enumUserWindowsCB, (LPARAM)&resultHwnd);
    return resultHwnd;
}

有了上面两个函数的辅助,下面的工作就简单了,在需要的地方加入如下代码就可以实现了:
HWND desktopHwnd = findDesktopIconWnd();
if(desktopHwnd) SetParent(this->winId(), desktopHwnd);


(适用于Win XP与Win7,其他未测试)
离线mingw32
只看该作者 8楼 发表于: 2011-02-15
顶7楼!
离线yao891126
只看该作者 9楼 发表于: 2011-05-02
谢了    
快速回复
限100 字节
 
上一个 下一个