Spiegelschrift



  • Hallo miteinander,

    weiss jemand ob es in CFont eine Eigenschaft/Methode gibt einen TrueType Font in Spiegelschrift auszugeben oder muß man sich selber einen erstellen?
    Gibt's vielleicht schon einen?

    Einen netten Gruß

    kfy



  • Hi,

    also ich gebe zu, dass mit CFont war ne Sackgasse. Habe jetzt einen
    workaround, nicht perfekt aber ausbaufähig (es geht darum, normale
    und Spiegelschrift im gleichen View zu verwenden)
    Falls es jemanden interessiert, hier ist etwas code:

    void CSdi_testView::OnInitialUpdate() 
    {
    	CView::OnInitialUpdate();
    	// Bitmap mit geeigneten Abmessungen als Ressource einfügen und laden
    	m_bmpBild.LoadBitmap(IDB_BITMAP2);
    }
    
    void CSdi_testView::DrawMirror(CDC* pDC, CString str, int x, int y)
    {
    	CDC mdc;
    	mdc.CreateCompatibleDC(pDC);
    	mdc.SelectObject(&m_bmpBild);
    	BITMAP bm;
    	m_bmpBild.GetBitmap(&bm);
    	mdc.TextOut(0, 0, str);
    	for(int dy = 0; dy < bm.bmHeight; dy++)
    	{
    		for(int dx = 0; dx < bm.bmWidth; dx++)
    		{
    			COLORREF cref = mdc.GetPixel(dx, dy);
    			pDC->SetPixel(x - dx, y + dy, cref);
    		}
    	}
    }
    
    void CSdi_testView::OnDraw(CDC* pDC)
    {
    	CSdi_testDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen
    	pDC->TextOut(100, 50, "Hallo");
    	DrawMirror(pDC, "Spiegelschrift", 100, 50);
    }
    

    Grüsse
    kfy



  • Nimm SetPixelV, der ist schneller weil er keinen COLORREF zurück gibt 😉 . Aber afaik gab es zum spiegeln noch bessere Methoden. Guck mal auf codeproject.com nach. EDIT: Und das Laden der leeren Bitmap ist Blödsinn.



  • Hi,
    @MaSTaH
    vielen Dank für Deine Tips!
    SetPixelV Aha!
    Die leere Bitmap finde ich auch Blödsinn, bloß wenn ich sie weglasse,
    sehe ich keine Spiegelschrift, offenbar ist dann der kompatible DC
    nicht richtig initialisiert oder so ?
    Vielleicht probierst Du es mal aus.

    MfG
    kfy



  • Du siehst dann nichts, ist klar. Guck dir mal CreateCompatibleBitmap an und gibt der Funktion als Höhe und Breite die Werte von GetTextExtent an 😉 .



  • Hi,
    meinst Du so:

    void CSdi_testView::DrawMirror(CDC* pDC, CString str, int x, int y)
    {
    	CDC mdc;
    	mdc.CreateCompatibleDC(pDC);
    	CBitmap bmp;
    	CSize siz = mdc.GetTextExtent(str);
    	bmp.CreateCompatibleBitmap(&mdc, siz.cx, siz.cy);
    	mdc.SelectObject(&bmp);
    	mdc.TextOut(0, 0, str);
    	for(int dy = 0; dy < siz.cy; dy++)
    	{
    		for(int dx = 0; dx < siz.cx; dx++)
    		{
    			COLORREF cref = mdc.GetPixel(dx, dy);
    			pDC->SetPixelV(x - dx, y + dy, cref);
    		}
    	}
    }
    

    Genauso sollte es sein, besten Dank nochml.

    MfG
    kfy


Anmelden zum Antworten