Seite 1 von 1

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

Verfasst: 19. September 2006 09:12
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

Verfasst: 20. September 2006 16:57
von FlorianBecker
Vielleicht auf QApplication heraussuchen, mit der WidgetListe, die es da gibt. Habe ich aber noch nie probiert.

Verfasst: 20. September 2006 23:07
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