OnMouseWheel: Ist Maus im Fenster?
-
Tag,
Ich habe hier folgenden Code, der erreichen soll, dass ich innerhalb meines GLUT-Fensters rein- bzw. rauszoomen kann:
BOOL COpenGLView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { if (/*????*/) { m_zoom += (GLfloat) zDelta/120; LookAtScene(); RenderScene(); } return __super::OnMouseWheel(nFlags, zDelta, pt); }
Ich würde nun gerne hinzufügen, dass ich nur zoomen möchte, wenn der Mauszeiger innerhalb meines GLUT-Fensters ist. Wie sollte ich darum diese if-Bedingung formulieren? Kann ich dass über pt erreichen, in dem ich überprüfe, wo sich die Maus gerade befindet, oder geht das einfacher?
H.W.
-
Du bekommst diese WM_MOUSEWHEEL nur wenn das Fenster den Focus/Capture oder eben wenn der Mauszeiger über Deiner Applikation ist.
pt sind die relativen Screen Koordinaten.
Also um ganz sicher zu gehen:
CRect rect; GetClientRect(rect); if (rect.PtInRect(pt)) { ...
-
Hallo Martin,
danke für die Antwort, aber da scheint etwas nicht zu stimmen.
1.) Ich bekomme diese WM_MOUSEWHEEL auch, wenn ich ausserhalb meines Childfestern bin, ja sogar, wenn ich ausserhalb des Parentfensters bin.
2.) Benutze ich den von dir vorgeschlagenen Code, dann bekomme ich WM_MOUSEWHEEL gar nicht mehr.
BOOL COpenGL_MDIView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { CRect rect; GetClientRect(rect); if (rect.PtInRect(pt)) { m_zoom += (GLfloat) zDelta/120; if (m_zoom < 0.0f) m_zoom = 0.0f; LookAtScene(); RenderScene(); } return __super::OnMouseWheel(nFlags, zDelta, pt); }
Woran liegt das jetzt?
H.W.
-
Schon mal daran gedacht pt zu kontrollieren?
Liegt er denn im rect?Ansonsten besorge Dir die abosolte Fensterposition mit GetMessagePos, diese mit ScreenToClient umwandeln, dann den selben Test.
-
HI.
noch eine Frage. In der MSDN steht:
The GetMessagePos function retrieves the cursor position for the last message retrieved by the GetMessage function.
Du aber schreibst:
besorge Dir die abosolte Fensterposition mit GetMessagePos
Widerspricht sich das nicht? Du schreibst vom Fenster, in der MSDN aber gehts um die Cursorposition.
H.W.
P.S.:GetMessagePos() und pt haben die selben Koordinaten, die absolute Cursorposition auf dem Monitor.