Always-in-Front Dialoge
-
09-09-2019 - |
Frage
Gibt es eine Möglichkeit, ein modeless Dialogfeld in C ++ MFC zu erstellen, die auf den anderen Fenster in der Anwendung immer bleibt? Ich bin ein bisschen wie das Dialogfeld Suchen in Visual Studio 2005 zu denken -., Wo er an der Spitze bleibt, aber man kann immer noch den darunter liegenden Text bearbeitet
(Wenn es einen Unterschied macht, es ist nicht MDI, es ist eine dialogbasierte Anwendung)
Lösung
Nish :
Erstellen des Dialog Aufenthalt auf
Haben Sie nicht Programme gesehen, die haben eine "always-stay-on-top" Option? Gut die unglaubliche Sache ist, dass man machen Sie Ihren Dialog Aufenthalt auf der Oberseite mit nur eine Codezeile. Einfach gesagt die in Ihrer Dialogklasse folgende Zeile OnInitDialog () Funktion.
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Im Grunde, was wir tun, ist zu verwenden, die SetWindowPos-Funktion zu ändern die Z-Ordnung unseres Dialogfenster. Wir machen unseren Dialog Aufenthalt über allen andere Fenster, indem sie es an die Spitze bewegt die Z-Ordnung. Nun, auch wenn Sie aktiviert ein anderes Fenster, unser Fenster wird an der Spitze bleiben. Aber ich würde Ihnen raten, um sicherzustellen, dass Sie genau wissen, was Sie tun, wenn Sie dies tun, denn es ist könnten die Menschen ärgern, wenn sie nicht bekommen können Ihr Fenster aus dem Weg, wenn sie das tun wollen.
Wie Sie in den Kommentaren erwähnt, macht die obige Zeile das Fenster oben auf jede Anwendung sitzen. Sie werden tun müssen,
SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Um ein Fenster auf der Oberseite nur Ihre Anwendung sitzt zu machen.
-Adam
Andere Tipps
Die akzeptierte Antwort nicht für Windows 7 oder höher. (Oder vielleicht its me) Aber macht das nicht modalen Dialog als Popup statt Kind löst es. Es wird nun WRT Hauptdialogfenster positioniert, aber Sie können Code schreiben, überall zu beschränken. die keine Grenze oder obere Leiste macht es ein einfaches Fenster.