Pfeil über Karte bewegen



  • Hallo,
    ich möchte in einem Dialog einen Pfeil über eine Karte wandern lassen. Die Karte habe ich als Resource eingebunden.

    CBitmap bitmap;                
        CDC MemDC;
        bitmap.LoadBitmap(IDB_BITMAP3);//Bitmap laden
        MemDC.CreateCompatibleDC(&dc); //Speicherkontext anlegen
        MemDC.SelectObject(&bitmap);   //Bitmap in Kontext einhängen
    
        // Bildanzeige mit fixer Groesse
        dc.BitBlt(0,0,579,400,&MemDC,0,0, SRCCOPY);
    

    Einen Timer habe ich auch schon angelegt nun möchte ich den Pfeil bei OnTimer jeweils ein Stück bewegen. Wie mache ich das nun am blödsten? Gibt es irgendwo ein Beispiel bei dem ich abgucken könnte?

    MfG
    Andreas



  • Willst du den Pfeil selber zeichnen, oder is das auch ein Bitmap?



  • Ich würde den Pfeil selbst zeichnen. Ich stelle mir das dann einfacher vor als wenn ich ein Bitmap benutze. Bei einem Bitmap müsste ich zusätzlich noch mit Tranzparenz arbeiten.

    Ich habe an ein gefülltes Polygon gedacht.



  • Ändere in der OnTimer()-Funktion einfach die Koordinaten und rufe Invalidate(TRUE) auf.
    In der OnPaint() zeichnest du die Koordinaten.
    Sollte also gehen. 😉



  • Danke das funktioniert jetzt soweit. Wie kann ich die Farben für die Linie bzw. die Füllfläche einstellen?

    Zum Zeichnen habe ich CDC::Polygon benutzt. Gibt es eine einfache Möglichkeit die gezeichnete Figur zu drehen oder muss ich mir dazu auch jeweils die x und y Werte ausrechnen die ich zur Grundform addiere. Bei Drehungen müsste ich ja noch mit Winkelfunktionen rechnen... 😞 😕

    Bisher stehen die Punkte so drin:
    cp_poly[0].x = 10 + x_pos;
    cp_poly[0].y = 0 + y_pos;
    cp_poly[1].x = 0 + x_pos;
    cp_poly[1].y = 30 + y_pos;
    cp_poly[2].x = 20 + x_pos;
    cp_poly[2].y = 30 + y_pos;



  • jo selbst is der Mann 😃
    Farbe ändern kannst du, indem du CBrush und/oder CPen-Objekte in den CDC lädst.



  • Oder du schaust dir mal, Gdi+ an. Da gibt es auch ne Rotate-Methode. Ist aber bei so einem Pfeil vielleicht zu viel des Guten.
    Für die Farbe nimmst bei den Linien einmal CPen und für die Füllfarbe CBrush.
    Zum hineinselktieren in dein dc nutzt du die SelectObject()-Methode.
    Dabei aber bitte beachten, dass du den default-Wert vorher speicherst und am Ende wieder auswählstl.
    Beispiel:

    CPen roterStift(RGB(255,0,0));
    CPen *defaultStift;
    
    defaultStift = dc.SelectObject(&roterStift);
    // ... hier nun deine Zeichnungen, etc.
    
    // aufräumen,   nun wieder der alte Stift
    dc.SelectObject(alterStift);
    
    CDialog::OnPaint();
    

    Mit dem Brush geht es genauso.


Anmelden zum Antworten