Get HWND on windows with Qt5 (from WId)
In Qt5 winEvent
was replaced by nativeEvent
:
bool winEvent(MSG* pMsg, long* result)
is now
bool nativeEvent(const QByteArray & eventType, void * message, long *result)
And in EcWin7::winEvent
you have to cast void
to MSG
:
bool EcWin7::winEvent(void * message, long * result){ MSG* msg = reinterpret_cast<MSG*>(message); if (msg->message == mTaskbarMessageId) { ...
I was able to get the application to work! Just replace:
mWindowId = wid;
with
mWindowId = (HWND)wid;
#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>static QWindow* windowForWidget(const QWidget* widget) { QWindow* window = widget->windowHandle(); if (window) return window; const QWidget* nativeParent = widget->nativeParentWidget(); if (nativeParent) return nativeParent->windowHandle(); return 0; }HWND getHWNDForWidget(const QWidget* widget){ QWindow* window = ::windowForWidget(widget); if (window && window->handle()) { QPlatformNativeInterface* interface = QGuiApplication::platformNativeInterface(); return static_cast<HWND>(interface->nativeResourceForWindow(QByteArrayLiteral("handle"), window)); } return 0; }