Seite 1 von 1

WinAPI aus Qt aufrufen

Verfasst: 17. September 2008 11:17
von AlGaN
Hallo,

zunächst mal: Ich habe bisher immer getrennte Projekte (Qt/WinAPI) gemacht.

Nun aber muss ich aus Qt heraus an die WinAPI Messages herankommen (externe Message aus einer DLL eines Hardware-Herstellers, der sendet WM_TAG messages). Es ist ein Beispielprogramm f. MFC dabei, leider programmiere ich mit der Express-Version von VC, deshalb kann ich MFC nicht verwenden...

Deshalb meine Frage: Wie greift man auf die Windows Messages in der WndProc zu? Muss ich dafür eine gekapselte DLL in Qt erstellen, die ihrerseits ein QWidget/etc. beinhaltet, das die Event-Schleife kapselt?

Unter Qt gibt es ja nur ein QApplication-Objekt, muss ich da einhaken?

Bin für jeden Tipp dankbar

Gruß,
Felix

Verfasst: 17. September 2008 11:26
von mabralume
Hmmm, ein Ansatz wäre eine Schnittstelle in Form einer eigenen dll, ne ganz normale Win32-Dll ohne MFC. Dort überwachst Du in einem thread die Windowsmessage-Queue (weiß grad nicht die API-Funktion). Wenn Du dann da was feststellst, teilst Du dies einfach über eine Callbackfunktion Deinem Qt-Programm mit .

In Deinem Qt-Programm implementierst Du eine globale static Class (z.B. einSingleton) die Du in der Callbackfunktion aufrufst, von da kannst Du dann das Signal weiterleiten wie Du willst.

Das wär der Umweg direkt über die WinApi. Ob es in der neuesten Qt-Version eine direkt Überwachung gibt kann ich nit sagen .

mfg
MB

Verfasst: 17. September 2008 11:27
von Christian81

Verfasst: 17. September 2008 11:39
von mabralume
Oder so :D

mfg
MB

Verfasst: 17. September 2008 11:55
von myme
...oder QWidget::winEvent falls die Events an ein bestimmtes Fenster gesendet werden.

Verfasst: 18. September 2008 11:49
von AlGaN
Hi,

danke für die Antworten. So wie ich es verstehe, habe ich also die Auswahl, das Event entweder von meinem QApplication-Objekt oder einem untergeordneten QWidget filtern/verarbeiten zu lassen.

Das Problem ist nur, dass es sich eigentlich um eine Nicht-GUI-Message des Readers handelt, weshalb ich die Message am liebsten in einer eigenen Klasse (die in einer eigenen DLL als Modul liegt) kapseln würde.
In meinem Projekt befinden sich 10 DLL-Module (natürlich nur ein GUI-Modul, das das Widget der Anwendung erstellt).

Sorry, wenn das etwas unwissend klingt, hab bisher mich nicht wirklich mit der MFC beschäftigt, aber die Messages einer DLL werden laut meinem MFC-Buch immer an die "Host-Anwendung" gesendet. Was ist aber, wenn die DLL von einer anderen DLL aus aufgerufen wird?

Ich werd mich wohl mal in die MFC Grundlagen einlesen müssen, trotzdem danke für alle Hinweise.

Felix