hallo,
ich habe ein koordinatensystem in welches signale gezeichnet werden. mit einem linksklick setze ich einen cursor an die CPoint.x koordinate. an derselben x-koordinate zeichne ich am ende des cursors ein dreieck (ausserhalb des koordinatensystems). dieses möchte ich jetzt gerne mit einem linksklick und gedrückter maustaste in x-richtung verschieben können.
bislang habe ich die drei systemmessages für lbuttondown, mousemove und lbuttonup wie folgt implementiert. m_rectClient ist dabei ein 20x20 px großer bereich welcher mein dreieck zum schieben bereitstellen soll. InpRect stellt das Koordinatensystem dar.
mein problem findest sich in OnMouseMove() wieder, hier muss ich es irgendwie anstellen die ausgewählte region des dreiecks als objekt zu fassen und zu verschieben, wie mache ich das?
ich habe ein koordinatensystem in welches signale gezeichnet werden. mit einem linksklick setze ich einen cursor an die CPoint.x koordinate. an derselben x-koordinate zeichne ich am ende des cursors ein dreieck (ausserhalb des koordinatensystems). dieses möchte ich jetzt gerne mit einem linksklick und gedrückter maustaste in x-richtung verschieben können.
bislang habe ich die drei systemmessages für lbuttondown, mousemove und lbuttonup wie folgt implementiert. m_rectClient ist dabei ein 20x20 px großer bereich welcher mein dreieck zum schieben bereitstellen soll. InpRect stellt das Koordinatensystem dar.
mein problem findest sich in OnMouseMove() wieder, hier muss ich es irgendwie anstellen die ausgewählte region des dreiecks als objekt zu fassen und zu verschieben, wie mache ich das?
C++:
void CWiwoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_rectClient.left = point.x-10;
m_rectClient.right = point.x+10;
m_rectClient.bottom = InpRect.top;
m_rectClient.top = InpRect.top-20;
CRgn rgnRect;
CRect r = m_rectClient;
int nX = point.x;
VERIFY(rgnRect.CreateRectRgnIndirect(&r));
if(rgnRect.PtInRegion(point))
{
TRACE("\nregion for cursor move!");
SetCapture();
m_bCatched = TRUE;
::SetCursor(::LoadCursor(NULL, IDC_HAND));
rgnRect.Detach();
}
Invalidate();
CDialog::OnLButtonDown(nFlags, point);
}
C++:
void CWiwoDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bCatched)
{
CClientDC DC(this);
DC.SetMapMode(MM_ISOTROPIC);
DC.SetWindowExt(20, 20);
}
CDialog::OnMouseMove(nFlags, point);
}
C++:
void CWiwoDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_bCatched)
{
ReleaseCapture();
m_bCatched = FALSE;
}
CDialog::OnLButtonUp(nFlags, point);
}
Zuletzt bearbeitet: