In Diagrammdialog mit der Maus ein Zoomfenster aufziehen
-
Hi!
Habe mir eine schöne und vielseitige Diagrammklasse zusammengeschrieben und stehe jetzt nur noch vor dem Problem, dass ich gerne mit der Maus ein Zoomfenster über einem Graphen aufziehen möchte.
Die Ereignisse OnLButtonUp und OnLButtonDown hab ich mir schon angeschaut, allerdings scheitere ich daran, während des Gedrückthaltens der linken Maustaste ein Rechteck über der Grafik anzuzeigen, welches sich mit der Mausbewegung verändert.Hat da jemand eine Idee?
Grüße, Thomas.
-
Du musst beim drücken der Maustaste den Capture auf das Diagrammcontrol setzen, damit erhält dein Control alle Mausbotschaften.
Beim Bewegen der Maus kannst du dann das Rechteck zeichnen und beim loslassen entfernst du den Rahmen wieder:void CTreeCustomDrawDlg::OnLButtonDown(UINT nFlags, CPoint point) { SetCapture(); rcRect.left = rcRect.right = point.x; rcRect.top = rcRect.bottom = point.y; CDialog::OnLButtonDown(nFlags, point); } void CTreeCustomDrawDlg::OnMouseMove(UINT nFlags, CPoint point) { if ( GetCapture()==this ) { CClientDC dc(this); if ( !rcRect.IsRectEmpty() ) dc.DrawFocusRect( rcRect ); rcRect.right = point.x; rcRect.bottom = point.y; dc.DrawFocusRect( rcRect ); } CDialog::OnMouseMove(nFlags, point); } void CTreeCustomDrawDlg::OnLButtonUp(UINT nFlags, CPoint point) { if ( GetCapture()==this ) { CClientDC dc(this); if ( !rcRect.IsRectEmpty() ) dc.DrawFocusRect( rcRect ); rcRect.SetRectEmpty(); ReleaseCapture(); } CDialog::OnLButtonUp(nFlags, point); }
rcRect ist ein Member des Controls in dem das alte Rechteck gespeichert wird.
Das Zeichnen funktioniert nicht mit neg. Größe des Rechtecks, das sollte aber kein Problem sein ( z.B. CRect::NormalizeRect ).
-
Super, danke! Es funktioniert.
Gruß, Thomas.
-
Sollte man denn nicht das Zeichnen nur in der OnPaint()-Funktion machen?
-
Dann wirst Du glaube ich nicht mehr glücklich, wenn bei jedem Mouse-Move die komplette OnPaint Methode aufgerufen wird.