Stiftauswahl per Toolbar



  • Hallo

    Bei einem Zeichenprogramm sollen verschiede Objekte gezeichnet werden und später änderbar sein. Wie unter anderem auch die Stifte für den Rahmen.

    Also die Toolbar für die verschieden Stricharten ist vorhanden
    und um die Auswahl einzufügen habe ich mir ein char array angelegt wo die Namen der Stifte gespeichert sind.
    Nur funktioniert das anscheinend nicht.
    Ich hoffe ich kann mit euer Hilfe eine Lösung finden
    wie ich dieses bewerkstelligen kann.

    static char arPens[5][14] = 
    {
    	"PS_SOLID",
    	"PS_DOT",
    	"PS_DASH",
    	"PS_DASHDOTDOT",
    	"PS_DASHDOT"
    };
    
    void CPowerPaintView::SetPenBrush(CDC *pDC, bool bTransparent, UINT nColor, UINT nColorFI,UINT nWidth, UINT nPen)
    {...
    m_pPenNew->CreatePen(arPens[nPen-ID_PEN_SOLID], nWidths[nWidth-ID_WIDTH_VTHIN], arColors[nColor - ID_COLOR_BLACK]);
    ...}
    


  • CreatePen() erwartet als Parameter keinen String, sondern einen int-Wert, also solltest du dein Array anders definieren:

    int arPEns[] =
    {
        PS_SOLID,
        PS_DOT,
        PS_DASH,
        PS_DASHDOTDOT,
        PS_DASHDOT
    };
    

    (PS_SOLID, etc. sind int-Konstanten, die für diesen Zweck definiert wurden)

    PS: Für arColors gilt vermutlich das selbe.



  • Ja Danke jetzt funktioniert es.

    die Farben wurden übrigens so definiert:

    static COLORREF arColorsFI[11] =  
    {
        RGB(  0,  0,  0),	//	Schwarz
        RGB(  0,  0,255),	//	Blau
        RGB(  0,255,  0),	//	Grün
        RGB(  0,255,255),	//	Cyan
        RGB(255,  0,  0),	//	Rot
        RGB(255,  0,255),	//	Magenta
        RGB(255,255,  0),	//	Gelb
        RGB(255,255,255),	//	Weiß
        RGB(128,128,128),	//	Dunkelgrau
        RGB(192,192,192),	//	Hellgrau
    	RGB(  0,  0,  0)	//	Benutzerdefinierte Farbe
    };
    

    kleine andere Frage noch wie kann man ausgewählte Objekte verschieben gibt es dafür eine fertige funktion oder muß ich die selber schreiben?



  • Hab da aber noch einen Fehler irgentwie.
    Wenn ich die Strichdicke erhöhe dann zeichnet er mir eine durchgehende Linie.



  • OdeX77 schrieb:

    kleine andere Frage noch wie kann man ausgewählte Objekte verschieben gibt es dafür eine fertige funktion oder muß ich die selber schreiben?

    Wo willst du etwas verschieben?
    Verschieben im Speicher geht per Zuweisung (oder notfalls per memmove()).
    Verschieben auf dem Bildschirm klappt per "alte Position mit Hintergrund übermalen - Objekt an neuer Position zeichnen".

    Wenn ich die Strichdicke erhöhe dann zeichnet er mir eine durchgehende Linie.

    Das sollte eigentlich nicht passieren
    (eventuell solltest du die zweite Version der CreatePen()-Methode mit PS_USERSTYLE nehmen und die Strichlängen per Hand definieren)


Anmelden zum Antworten