[gelöst] Windows-HWND zu QWidget*-Konvertierung

Alles rund um die Programmierung mit Qt
Antworten
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

[gelöst] Windows-HWND zu QWidget*-Konvertierung

Beitrag von gerome69 »

Hallo zusammen,
habe gerade einen Bildschirmschoner für Windows geschrieben, der auch wunderbar funktioniert mit Anzeige und Konfigurationsdialog. Das einzige, was nicht geht, ist die Vorschau in dem "Mini-Monitor", wenn ich mit der rechten Maustaste auf den Desktop klicke und die Registerkarte "Bildschirmschoner" anwählen.

Über die Kommandozeile kommt u.a. solch ein Parameter "/p:345678". Dieser Parameter ist die WId des Fensters, innerhalb dessen ich meine Vorschau anzeigen muß, sprich der "Mini-Monitor".
Ich habe es dann so versucht:
[in WId steht eben jene extrajhierte Nummer des parent Windows]

QWidget *parent=QWidget::find((HWND)WId);

Dann eine Debug-Ausgabe:
if (parent==NULL)
QMessageBox::information(NULL,"","No parent "+QString::number(WId));
else QMessageBox::information(NULL,"","Parent found "+QString::number(WId));

Dann das Widget erstellen und reichmalen etc.
QWidget *miniMonitor=new QWidget(parent);

Funktioniert aber nicht. parent ist immer NULL. Trotz scheinbar gültiger WId bekomme ich einfach keinen QWidget* Zeiger darauf und infolgedessen kann ich kein Child-Window anlegen.

Danke schön für Tips, Bernd
Zuletzt geändert von gerome69 am 20. September 2006 23:08, insgesamt 1-mal geändert.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Vielleicht auf QApplication heraussuchen, mit der WidgetListe, die es da gibt. Habe ich aber noch nie probiert.
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag von gerome69 »

Inzwischen gelöst dank Tip im engl. qtforum:
Mit QWidget::find() kann man nur auf von QT erzeugte Fenster einen Zeiger bekommen.
Was hilft, ist die Windows-API-Funktion ::SetParent(...) innerhalb des Konstruktors zu verwenden.

Gruß, Bernd
Antworten