PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual C++ MFC MouseDown


LeMauvais
2004-01-16, 12:50:47
Hallo,

ich habe ein kleines Problem mit der VC++ MFC. Ich habe eine ganz einfache, Dialogfeldbasierte Anwendung. Dort hab ich diesen Pushbutton aus der Toolbox verwendet. Nun möchte ich, wenn ich auf den Button klicke und die Maustaste festhalte, dass das Programm z. B. einen Zähler hochzählt und damit wieder aufhört, wenn ich die Maustaste wieder loslasse. Leider hat der Pushbutton kein Mousedown Ereignis und den ON_WM_LBUTTONDOWN bekomme ich auch nicht, wenn ich auf den Button klicke. Hat jemand eine Idee, wie ich das realisieren kann?

Gruß

Metal Maniac
2004-01-16, 13:39:52
Man könnte beim Drücken des Buttons (BN_CLICKED) 'nen Timer starten, und beim nächsten WM_LBUTTONUP den Timer stoppen, und aufgrund der vergangenen Zeit den Zähler setzen.
Das Dumme ist halt nur, dass nur einmal ein Event mit "Button gedrückt" auftritt, nicht andauernd wie z.B. bei Keyboard-Events, in denen eine Wiederholrate für gedrückte Tasten eingestellt ist.

LeMauvais
2004-01-16, 13:59:13
Original geschrieben von Metal Maniac
Man könnte beim Drücken des Buttons (BN_CLICKED) 'nen Timer starten, und beim nächsten WM_LBUTTONUP den Timer stoppen, und aufgrund der vergangenen Zeit den Zähler setzen.
Das Dumme ist halt nur, dass nur einmal ein Event mit "Button gedrückt" auftritt, nicht andauernd wie z.B. bei Keyboard-Events, in denen eine Wiederholrate für gedrückte Tasten eingestellt ist.

ja, diese Idee hatte ich auch. Leider kommt er erst in das BN_CLICKED rein, wenn ich die Maustaste wieder losgelassen habe. Bringt mir also leider nichts :(
Des weiteren gibt es noch das Problem, dass der WM_ON_LBUTTONUP nicht kommt, wenn man die Maustaste über dem Button loslässt. Das ist wirklich ein Kackproblem, ich frag mich wirklich, wieso dieser Button kein BN_LMOUSEUP hat...

Gruß

Metal Maniac
2004-01-16, 14:36:25
Das hier könnte die Lösung sein:
http://www.openroad.org/school/faq/mfc.html#SetCursor

Indem man WM_SETCURSOR abfängt, und testet, ob der Mauszeiger über dem Button ist. Den Parameter "message" von OnSetCursor müsste man dann nach WM_LBUTTONUP/DOWN überprüfen können.

LeMauvais
2004-01-16, 17:00:31
Original geschrieben von Metal Maniac
Das hier könnte die Lösung sein:
http://www.openroad.org/school/faq/mfc.html#SetCursor

Indem man WM_SETCURSOR abfängt, und testet, ob der Mauszeiger über dem Button ist. Den Parameter "message" von OnSetCursor müsste man dann nach WM_LBUTTONUP/DOWN überprüfen können.

ok, das geht. Ist zwar irgendwie umständlich, aber was solls, hauptsache er macht endlich das, was ich will.
Thx

Metal Maniac
2004-01-16, 19:17:41
Original geschrieben von LeMauvais
ok, das geht. Ist zwar irgendwie umständlich, aber was solls, hauptsache er macht endlich das, was ich will.
Thx

Mei, es handelt sich ja schliesslich um Microsoft ;)