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

Odpowiedz Nowy wątek
2016-05-23 15:15
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?

Pozostało 580 znaków

2016-05-23 22:01

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

https://msdn.microsoft.com/pl[...]op/dd144938%28v=vs.85%29.aspx

Teraz poszukaj sobie jak liczy się logical units.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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