Abfangen von Wm_Messages



  • Erneute Anfrage:

    Ich habe mal vor kurzem die Frage gestellt, ob es geht MouseEvents... abzufangen.

    Dabei kam die Antwort: Hooks könnten diese abfangen.
    Nur, wie realisiert man Hooks.

    Mein Problem:

    Einfache Aufgabe.
    Es soll über die Messages Mouse Move,ButtonUp,Button Down ein Rechteck gezeichnet werden, ähnlich von Windows.. das Markieren mit der Maus.

    Problem ist, dass sobald das Programm startet, Rectangles gezeichnet werden, bis der erste Klick erfolgt. Wie kann ich das abfangen?

    [code]
    void CRechteck_zeichnenView::OnMouseMove(UINT nFlags, CPoint point)
    {
    m_point[0].x=point.x;
    m_point[0].y=point.y;

    CClientDC dc(this);

    dc.Rectangle(m_point[0].x,m_point[0].y,m_point[1].x,m_point[1].y);

    if(iFlag==1){
    Invalidate();
    }
    CView::OnMouseMove(nFlags, point);
    }

    void CRechteck_zeichnenView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    m_point[1].x=point.x;
    m_point[1].y=point.y;

    CView::OnLButtonDown(nFlags, point);
    }

    void CRechteck_zeichnenView::OnLButtonUp(UINT nFlags, CPoint point)
    {
    iFlag=1;

    CView::OnLButtonUp(nFlags, point);
    }



  • ich verseth nicht so ganz was du willst ... das hat wenig mit einem Hook zu tun was du da hast ... das sind eher 2 Funktionen, die auch noch jeweils eine gleichnamige Funktion einer anderen Klasse aufrufen(wobei ich davon ausgehe das das die Basisklasse ist ...)



  • Versuch's mal so...

    Im Konstruktor unbedingt
    flag = 0;
    setzen.

    [code]
    void CRechteck_zeichnenView::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (iFlag==1)
    {
    m_point[0].x=point.x;
    m_point[0].y=point.y;

    CClientDC dc(this);

    dc.Rectangle(m_point[0].x,m_point[0].y,m_point[1].x,m_point[1].y);
    Invalidate();
    }
    }

    Dein Problem ist die Zusstandslogik, nicht die Messageverarbeitung.



  • Achja ...

    void CRechteck_zeichnenView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    flag = 0; //wichtig
    m_point[1].x=point.x;
    m_point[1].y=point.y;

    CView::OnLButtonDown(nFlags, point);
    }



  • upps vertippt...

    in
    void CRechteck_zeichnenView::OnLButtonDown(UINT nFlags, CPoint point)
    flag = 1;

    in
    void CRechteck_zeichnenView::OnLButtonUp(UINT nFlags, CPoint point)
    flag = 0;


Anmelden zum Antworten