Qt-透明窗体之嵌入桌面内
相关资料:
https://download.csdn.net/download/zhujianqiangqq/13713144 代码包下载
.pro
1 QT += core gui 2 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4 5 CONFIG += c++11 6 7 # The following define makes your compiler emit warnings if you use 8 # any Qt feature that has been marked deprecated (the exact warnings 9 # depend on your compiler). Please consult the documentation of the 10 # deprecated API in order to know how to port your code away from it. 11 DEFINES += QT_DEPRECATED_WARNINGS 12 13 # You can also make your code fail to compile if it uses deprecated APIs. 14 # In order to do so, uncomment the following line. 15 # You can also select to disable deprecated APIs only up to a certain version of Qt. 16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 17 18 SOURCES += \ 19 main.cpp \ 20 windowDesktop.cpp 21 22 HEADERS += \ 23 windowDesktop.h 24 25 FORMS += \ 26 mainwindow.ui 27 28 LIBS += -lUser32 29 30 # Default rules for deployment. 31 qnx: target.path = /tmp/$${TARGET}/bin 32 else: unix:!android: target.path = /opt/$${TARGET}/bin 33 !isEmpty(target.path): INSTALLS += target 34 35 RESOURCES += \ 36 resource.qrc
main.cpp
1 #include <windows.h> 2 #include <winuser.h> 3 #include <QApplication> 4 #include "windowDesktop.h" 5 6 BOOL enumUserWindowsCB(HWND hwnd,LPARAM lParam) 7 { 8 long wflags = GetWindowLong(hwnd, GWL_STYLE); 9 if(!(wflags & WS_VISIBLE)) return TRUE; 10 11 HWND sndWnd; 12 if( !(sndWnd=FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL)) ) return TRUE; 13 HWND targetWnd; 14 if( !(targetWnd=FindWindowEx(sndWnd, NULL, L"SysListView32", L"FolderView")) ) return TRUE; 15 16 HWND* resultHwnd = (HWND*)lParam; 17 *resultHwnd = targetWnd; 18 return FALSE; 19 } 20 21 HWND findDesktopIconWnd() 22 { 23 HWND resultHwnd = NULL; 24 EnumWindows((WNDENUMPROC)enumUserWindowsCB, (LPARAM)&resultHwnd); 25 return resultHwnd; 26 } 27 28 int main(int argc, char *argv[]) 29 { 30 QApplication a(argc, argv); 31 32 Dialog w; 33 HWND desktopHwnd = findDesktopIconWnd(); 34 if (desktopHwnd) 35 SetParent((HWND)w.winId(), desktopHwnd); 36 w.setFixedSize(QSize(800, 400)); 37 w.show(); 38 return a.exec(); 39 }
windowDesktop.h
1 #ifndef WINDOWDESKTOP_H 2 #define WINDOWDESKTOP_H 3 4 #include "QObject" 5 #include "QDialog" 6 #include "QLineEdit" 7 #include "QPainter" 8 #include "QWidget" 9 #include "QBitmap" 10 11 class Dialog : public QWidget 12 { 13 Q_OBJECT 14 public : 15 Dialog(QWidget *parent = 0); 16 ~Dialog(); 17 18 virtual void paintEvent(QPaintEvent *event); 19 }; 20 21 22 #endif // WINDOWDESKTOP_H
windowDesktop.cpp
1 #include "windowDesktop.h" 2 3 Dialog::Dialog(QWidget *parent) 4 : QWidget(parent) 5 { 6 // 创建个LineEdit用来测试焦点 7 QLineEdit *le = new QLineEdit(this); 8 } 9 10 Dialog::~Dialog() 11 { 12 } 13 14 void Dialog::paintEvent(QPaintEvent *event) 15 { 16 QPainter p(this); 17 p.fillRect(rect(), QColor(0, 0xff, 0, 33)); 18 return; 19 }
作者:疯狂Delphi
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎关注我,一起进步!扫描下方二维码即可加我