GetTextExtentPoint32 zwraca zbyt dużą wartość (mfc)

0

Cześć, nie wiem czemu tak jest. Mam sobie kontrolkę, która dziedziczy po CStatic. To zwykły "label" z przeźroczystym tłem i możliwością prostego zawijania tekstu.

I teraz chcę sprawdzić, czy mam zawijać tekst, czy nie. Jeśli tekst jest dłuższy niż szerokość kontrolki, to zawijaj go. Wszystko się dzieje w OnSetText:

 
CRect thisRect;
SIZE txtSize = {0};
GetWindowRect(&thisRect); //pobierz wymiary kontrolki


CFont * pOldFont = GetDC()->SelectObject(GetFont());
GetTextExtentPoint32(GetDC()->GetSafeHdc(), str, str.GetLength(), &txtSize);
GetDC()->SelectObject(pOldFont);

if(txtSize.cx > thisRect.Width())
{

}

Najpierw próbowałem normalnie:
GetTextExtentPoint32(GetDC()->GetSafeHdc(), str, str.GetLength(), &txtSize);
bez ustawiania żadnych fontów. Ale po przeczytaniu kilku postów, okazało się, że fonta trzeba ustawić. Niemniej jednak to nic nie dało. Wartości są takie same. Przykładowo szerokość mojej kontrolki to 150, GetTextExtentPoint32 zwraca mi 230, a ja widzę, że tekst się mieści w kontrolce i jest jeszcze zapas. Co tu jest nie tak?

1

A pointer to a SIZE structure that receives the dimensions of the string, in logical units.

https://msdn.microsoft.com/pl-pl/library/windows/desktop/dd144938%28v=vs.85%29.aspx

Teraz poszukaj sobie jak liczy się logical units.

1 użytkowników online, w tym zalogowanych: 0, gości: 1