Dialog - größe ändern
-
Hi Leute!
Ich hab einen Dialog mit der Rahmen-Eigenschaft "Größe ändern". Ich kann also unten Rechts den Dialog mit der Maus am Rahmen kleiner/größer ziehen.
Unter bestimmten Umständen, wenn das Programm bestimmte Operationen durchführt, darf dies aber nicht möglich sein. Wie also kann ich das Unterbinden ? Ich finde auch irgendwie keine Nachricht die dafür zuständig ist.
-
Kannst du dem Fester den Stil WS_THICKFRAME wegnehmen? Dann sollte das nicht mehr gehen.
-
Und das geht, wenn das Fenster schon erstellt ist ?
Schöner wärs natürlich, wenn alles so bleibt und nur eine Meldung kommt a la "Größe ändern in diesem Modus nicht möglich" mit anschliessendem Größe-ändern-blocken
-
void CDlg::OnSize(UINT nType, int cx, int cy) { if(modus_wo_groesse_aendern_nicht_erlaubt) { MessageBox("Nichts ziehen Grösse,Trottel") } else { CDialog::OnSize(nType, cx, cy); } }
-
@Andorxor:
So gehts leider nicht. WM_SIZE wird zum falschen Zeitpunkt aufgerufen. Und ein vorzeitiges Verlassen der Funktion ohne CDialog::OnSize Aufruf bewirkt ebenfalls nichts. Ich brauche irgendetwas, wo ich es abfangen kann, bevor die olle CDialog Klasse damit beginnt, den Dialog zu "size-en". So eine Art "PreSizeWindow"
-
Kannst du mit dieser Lösung was anfangen? Musst nur nen anderen Hittest-Wert nehmen.
http://www.c-plusplus.net/forum/viewtopic.php?t=78518
-
Schau' dir mal WM_SIZING bzw. CWnd::OnSizing an.
-
estartu_de schrieb:
Kannst du mit dieser Lösung was anfangen? Musst nur nen anderen Hittest-Wert nehmen.
http://www.c-plusplus.net/forum/viewtopic.php?t=78518Muhaha
Die Lösung ist lustig
Aber es funktioniert.Danke!
-
Ich find das genial. Damit kann man so irre Sachen machen und alles eigentlich ganz einfach.
Du kannst die Hittestwerte ja beliebig tauschen. Also kanns du auch verursachen, dass beim Klicken auf das Kreuz das Fenster maximiert wird und umgekehrt. Da läßt sich schön Schindluder mit treiben.
Apropos, da fällt mir was für mein Prog ein...
-
Servus,
die Idee von estartu_de hatte ich Anfangs übernommen aber dann kam ich auf die Idee mir mal OnSysCommand genauer anzuschauen. Das passt dann jetzt auch hier hin und dieses Beispiel funktioniert auch:
ON_WM_SYSCOMMAND() /////////// void CDeinDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == SC_SIZE) return; CDialog::OnSysCommand(nID, lParam); }
Dann kannst du nicht mehr Resizen, aber Maximize und Minimize funzt...
*winke*
Hellsgore