Koordinaten eines Rechtecks Abspeichern und in OnLButtonDown verwenden



  • Hallo,

    in meiner MFC-Anwendung ist in der Methode View::OnDraw ein Rechteck gezeichnet. Derzeit habe ich für jede Seite die DeviceKontext-Methoden MoveTo() und LineTo() verwendet, es gibt doch bestimmt eine Methode die mir ein Rechteck zeichnet? Das ist allerdings nicht meine Hauptfrage, sondern nur am Rande gestellt!

    Mein eigentliches Problem besteht darin, dass ich nicht weiß wie ich die Koordinaten meines Rechtecks, also quasi die komplette Fläsche -bestehend aus Koordinaten- abspeichern und diese dann in der View::OnLButtonDown verwenden kann. Ich möchte bewirken, dass wenn der User im Bereich des Rechtecks mit der linken Mousetaste klickt, eine Aktion ausgeführt wird. Dazu brauche ich doch bestimmt die Fläschenkoordinaten meines Rechtecks, oder?

    Welche Mittel brauche ich um dies zu realisieren? Spielt CRect dabei eine Rolle?

    Liebe Grüße
    ToH



  • Spielt CRect dabei eine Rolle?

    Ja, eine grosse! 😃



  • Sorry für meine folgende Frage, aber hab ich bei meinem bisherigen Posting irgendetwas falsche gamcht? Oder wieso bekomme ich nur so eine knappe Antwort? Ich bin noch Anfänger, und hätte ehrlich gesagt auf etwas mehr Erklärung gehofft. Nun gut, dann werde ich versuchen mit meinen vier MoveTo- und LineTos -die das Rechteck bilden- in zusammenhang mit CRect meine Anwendung zum laufen zu bekommen. Schade das ich hier für nur kanpp beraten wurde. Aber dennnoch danke!



  • Hej toh

    Bleib mal locker, dein Post is grad mal 20 Minuten alt und du resignierst schon. Viele Leute müssen nebenbei arbeiten und können nicht ständig das Forum kontrollieren 🙂

    Ich hab übrigens ein ähnliches Problem wie du. Ich will auch auf die Positionskoordinaten (einer Checkbox) zugreifen und diese verändern. Ich weiß von der Funktion GetWindowRect(), mit der man wohl eine Art umschließendes Rechteck ermitteln kann. Aber ich whabe noch nicht herausgefunden, wie genau ich sie anwende.

    MfG
    Neron



  • Nein, du hast nichts falsch gemacht - nur eine Frage gestellt, zu der ich hier keinen fertigen Code habe. 😉

    Zum Speichern nimmst du einfach ein CRect als Membervariable.
    Und zum Zeichnen dürfte Rectangle sich eignen.


  • Administrator

    @toh ...
    Bitte nicht so ungeduldig ^^

    Also schau mal in der MSDN nach was du zu CRect findest. Richtig eine Klasse für Rechtecke ^^
    Wenn du nur ein Rechteck speichern willst, dann empfiehlt sich in der Klassendefinition, also der .h ein Attribut hinzuzufügen.

    class CDeinProgView : public CView
    {
        // ... bla bla bla
        CRect m_rect;
        // bla bla bla ...
    }
    

    In der Funktion OnDraw zeichnest du dieses Rechteck.

    void CDeinProgView::OnDraw(CDC* pDC)
    {
        pDC->Rectangle(m_rect);
    }
    

    Und bei OnLButtonDown

    void CDeinProgView::OnLButtonDown(UINT nFlags, CPoint point)
    {
        CClientDC dc(this);
        OnPrepareDC(&dc)
        dc.DPtoLP(&point);
    
        if(m_rect.PtInRect(point))
        {
            // Ausfürhung von irgendwas ...
        }
    }
    

    Zu den einzelnen Sachen kannst du dir auch noch Infos in der MSDN holen.
    Wenn du eine Liste von CRect speichern willst, schau dir mal CArray oder CList in der MSDN an. Dann sieht das in der .h ca. so aus:

    class CDeinProgView : public CView
    {
        // ... bla bla bla
        CArray<CRect, CRect> m_RectArray;
        // oder
        CList<CRect, CRect> m_RectList;
        // bla bla bla ...
    }
    

    Ich hoffe ich konnte dir helfen.

    Grüssli



  • Hi Neron,

    du das war auch nich bös gemeint, von resignieren keine Spur, auch wenn sichs vielleicht so angehört hat!

    Aber eins kann ich immer wieder nicht verstehen, wenn die Leute nicht genügent Zeit haben ein Posting ansatzweise "ausführlich" zu kommentieren, wieso wird dann überhaupt geantwortet?

    Mit einer Antwort wie

    Spielt CRect dabei eine Rolle?
    Ja, eine grosse! 😃

    kann ich nun rein gar nichts anfangen, und ich glaube andere die selbige Fragestellung haben auch nicht!

    Mir geht es auch nicht darum wie schnell ich eine Antwort erhalte, sondern ob diese Antwort mir evtl. weiter helfen kann! Ich will hier auch jetzt keinen Krieg anfangen oder sowas, mir gings echt nur ums Prinzip!

    Aber nur so am Rande, ich habe auch wenig Zeit. Neben meinem Informaik Studium 20 bis 30 Std pro Woche Arbeiten, Prüfungen, Projekt Abgaben... und sich neben her ungewollt in Foren ärgern.

    Ich hoffe das das jetzt nicht Negativ aufgefasst wird, ich will hier wirklich keinen Stress, mir gings wie gesagt nur ums Prinzip!

    EDIT: Grüssli! Vielen Dank, ja du konntest mir weiter helfen!



  • Ich fands lustig 😃
    außerdem: estartu darf das 😉



  • connan schrieb:

    außerdem: estartu darf das 😉

    ich finde ein Moderator eines Forums sollte ein Vorbild für alle anderen sein und mit gutem Beispiel voran gehen. Tut mir leid fals das jetzt etwas kritisch klingt, aber ich fand die Reaktion auf mein erstes Posting extrem überheblich und keinerlei hilfreich! Das soll jetzt auch kein persönlicher Angriff werden, ich denke wir haben uns hier alle lieb, auch wenns manchmal Meinungsverschiedenheiten gibt... 🙂

    Ich wünsch euch einen schönen Abend, machts gut, ich mach jetzt Feierabend!!!

    Grüße
    ToH



  • Mein eigentliches Problem besteht darin, dass ich nicht weiß wie ich die Koordinaten meines Rechtecks, also quasi die komplette Fläsche -bestehend aus Koordinaten- abspeichern ...

    Abspeichern siehe:
    http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel7.htm
    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap13.htm


Anmelden zum Antworten