Maus darf nicht aus dem Dialogfeld heraus bewegt werden, aber wie ??
-
der benutzer darf die größe von zwei listen in meinem dialogfeld bestimmten. die kann er indem er die position des trennbalens zwischen den listen durch bewegen der maus ändert (hier ein bild http://www.gayfiles.de/lcs.jpg aus thread http://www.c-plusplus.net/forum/viewtopic.php?p=670951#670951).
jetzt hab ich ein neues problem:
wenn der benutzer die maustaste gedrückt hält und sie loslässt wenn die maus ausserhalb meines dialogfeldes ist, merkt das programm nicht das die maus losgelassen wurde.
wollte jetzt keinen maus-hook schreiben sondern einfach dem programm mitteilen, dass die maus nur im dialogfeld bewegt werden darf.hab das in einigen programmen auch schon gesehen
-
Dialog Maximieren ?
*duck und weg*
-
Oder mittels ClipCursor() -> Siehe MSDN
mfg
me
-
also ClipCursor() war da schon der bessere tip
danke, hat super geclipt !!
-
ClipCursor macht Probleme, wenn der Benutzer währenddessen mit Alt-Tab die Fenster umschaltet (und ist auch nicht ganz die feine englische Art
)
Richtig ist folgendes Vorgehen:
Wenn die Verschiebeaktion startet, musst du SetCapture aufrufen. Damit werden alle Maus-Meldungen an den Dialog gesendet, auch wenn die Maus außerhalb ist.
Wichtig ist, das auf jeden Fall wieder ReleaseCapture aufgerufen wird, wenn die Maustaste losgelassen wird.
Außerdem solltes du OnCancelMode überschreiben. Diese Funktion wird z.B. aufgerufen, wenn der Benutzer während SetCapture mit Alt-Tab auf ein anderes Programm umschaltet. In OnCancelMode muss dann auch ReleaseCapture aufgerufen werden.
Also so in etwa:
CMyDialog::OnLButtonDown() { ... StartDrag(); ... } CMyDialog::StartDrag() { ... SetCapture(); } CMyDialog::EndDrag(BOOL bCancel) { if (!bCancel) ... // Daten übernehmen ReleaseCapture(); } CMyDialog::OnLButtonUp() { EndDrag(FALSE); } CMyDialog::OnCancelMode() { EndDrag(TRUE); }
-
hey, sehr sehr guter tip !! danke :D;)