Programm nicht minimieren, wenn Desktop angezeigt werden soll (Windowstaste+D)
-
Hallo
Ich hab mal eine Frage: Ich will verhindern, das mein Programm mit Windowstaste+D minimiert wird. Zur Zeit hab ich diesen Ansatz:
void CTestMFCDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if(nType==1){ // bedeutet minimieren // this->ShowWindow(SW_RESTORE); geht nicht -> Workaround mit Timer SetTimer(1,100,0); // in 100 ms Timer starten } } void CTestMFCDlg::OnTimer(UINT_PTR nIDEvent) { KillTimer(1); // Timer beenden this->ShowWindow(SW_RESTORE); // Fenster wiederherstellen CDialog::OnTimer(nIDEvent); }Ich nehm den Timer, weil sofortiges Restore keinen Effekt hat. (Das auch beim minimieren sofort wieder restored wird ist kein Problem)
Leider hab ich jetzt ein flackern. Ich würd gern wissen ob man die Minimierung von vornherein unterbinden kann.
-
Und warum willst Du das?
Warum willst Du nicht, dass der User das bekommt was er möchte? Den Desktop?
Leuchtet mir nicht ein.Als Ansatz könntest Du ja mal WS_EX_TOPMOST!
Du müsstest in jedem Fall den Stil WS_MINIMIZEBOX entfernen.
-
Danke für deine Antwort.
Warum will ich das?
Es geht um eine Vollbildanwendung auf dem Sekundärem Bildschirm. (ne Präsentation) Ich will, das der User auf dem ersten Bildschirm bekommt was er will, den Desktop, aber ich will nicht, das die Präsentation über den Beamer gestoppt wird.
Mh Topmost ist auch nicht unbedingt was ich will. Es soll auch möglich sein z.B. Powerpoint über dem Fenster anzuzeigen. Das ist ein cooles Feature...
Ich dachte in erster Linie an sowas wie minimieren für dieses Fenster abfangen...
Ohne Topmost Style wird das Fenster trotz entfernter Minimize Box minimiert. (Wenn ich sie nicht entferne, kommt wenigstens die Nachricht "OnSize(1,0,0)")
-
Ich hab' zumindest noch nie erlebt dass Win+D ein Fenster nicht versteckt hätte.
Was man öfters sieht ist dass manche Fenster wieder da sind sobald man irgendein anderes Fenster "wiederherstellt", aber dass es gleich garnicht weggeht...Wenn die Sache mit "andere Fenster sollen drüber lieben können" nicht wäre würde ich sagen DirectDraw im Fullscreen Modus, aber so... schwierig.
Hast du schon probiert diverse Messages ala WM_SIZE, WM_MOVE oder WM_SHOWWINDOW
zu überschreiben?
-
Was bedeutet denn Messages überschreiben?
Reicht es wenn ich in den Methoden, das aufrufen der Basismethode unterbinde? (siehe Beispiele) Dann hab ichs probiert und es hat nicht geklappt. Oder geht es um anderes überschreiben?
void CTestMFCDlg::OnMove(int x, int y) { // CDialog::OnMove(x, y); } void CTestMFCDlg::OnShowWindow(BOOL bShow, UINT nStatus) { // CDialog::OnShowWindow(bShow, nStatus); }
-
evtl in der PreTranslate aussortieren?
-
In der Pretranslate kommen WM_SIZE & WM_MOVE Nachrichten komischerweise gar nicht an. (bei Win+D aber auch sonst irgendwie nicht)
Was bei Win+D ankommt ist:WM_SYSCOMMAND
WM_SYSKEYDOWN
WM_KEYUPAber wenn ich die Nachrichten aussortiere, schafft er es trotzdem den Desktop anzuzeigen.