Textbreite in Pixeln mit TextExtent( )???
-
Hallo,
ich hab das Problem, das ich eine Funktion brauche, die einen Text übernimmt und mir dann die Breite dieses Textes in Pixeln zurückliefert.
Bisher hatte ich das so:
CString BeispielText("Hello World");
int Breite = pDC->GetTextExtent(BeispielText);im Gerätekontext befindet sich irgendeine Schrift z.B. Arial.
Dummerweise steht danach in Breite nicht die korrekte Breite sondern eine Zahl die viel größer ist als die Tatsächliche Breite.
Woran liegt das??? Vielleicht daran das die einzelnen Buchstaben verschieden Breit sind und Textextent nur eine Standardbreite annimmt?Wie krieg ichs hin das ich die korrekte Breite kriege
Vielleicht kann mir ja jemand weiterhelfen
Danke
-
Danke hat sich erledigt
hatte vergessen die Schrift in den Gerätekontext zu laden die ich haben will
hier die Lösung:
int CThunderstormView::GetPixelBreiteDesTextes(CString Text, CFont &Schrift)
{CDC* pDC = GetInitializedDC();
CFont* SchriftAlt = pDC->SelectObject(&Schrift);
CSize Size = pDC->GetTextExtent(Text);
int Breite = Size.cx;pDC->SelectObject(SchriftAlt);
ReleaseDC(pDC);return Breite;
}
-
Unsauber!!
1. Code-Tags benutzen
2. Was macht GetInitializedDC()?
!! Vermeide, Objekte zurückzugeben, die innerhalb einer Funktion erstellt werden und innerhalb einer anderen zerstört werden müssen !!
-
Hi,
danke für den Hinweis.
Aber was sind eigentlich Code Tags???
Danke
-
Codetags sind dafür da, damit der code der hier gepostet wird übersichtlicher wird!
deiner sollte so aussehn:int CThunderstormView::GetPixelBreiteDesTextes(CString Text, CFont &Schrift) { CDC* pDC = GetInitializedDC(); CFont* SchriftAlt = pDC->SelectObject(&Schrift); CSize Size = pDC->GetTextExtent(Text); int Breite = Size.cx; pDC->SelectObject(SchriftAlt); ReleaseDC(pDC); return Breite; }