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