делаю так: Код (Text): hdc = GetDC(m_hStatusBar); hStatusFont = (HFONT)SendMessage(m_hStatusBar, WM_GETFONT, 0, 0l); hOldStatusFont = (HFONT)SelectObject(hdc, (HGDIOBJ)hStatusFont); SendMessage(m_hStatusBar, SB_GETBORDERS, 0, (LPARAM)&nBorders); for (i=0; i<DVSBARPARTSCOUNT; i++) { GetTextExtentPoint32(hdc, szParts[i], lstrlen(szParts[i]), &PartSize); nParts[i] = PartSize.cx; if (i) nParts[i] += (nParts[i-1] + nBorders[2]); } SendMessage(m_hStatusBar, SB_SETPARTS, (WPARAM)DVSBARPARTSCOUNT, (LPARAM)nParts); for (i=0; i<DVSBARPARTSCOUNT; i++) SendMessage(m_hStatusBar, SB_SETTEXT, (WPARAM)i, (LPARAM)szParts[i]); SelectObject(hdc, (HGDIOBJ)hOldStatusFont); ReleaseDC(m_hStatusBar, hdc); все равно текст не влезает. Как правильно сделать?
А с остальными подобными ф-ми не пробовали? GetTextCharacterExtra GetTextMetrics => tmMaxCharWidth * strlen // для италика не работает вроде и т.д. и т.п.
Для немоноширинных шрифтов tmMaxCharWidth - слишком много (а tmAveCharWidth - слишком мало ) GetTextExtentPoint32 правильно возвращает границы текста. Я что-то не учитываю в самом контроле (про левую границу знаю, но она не настолько широкая, чтобы "съедать" полтора символа)
После исправления: Код (Text): if (i) nParts[i] += (nParts[i-1] + nBorders[2] * 2); начал правильно считать (вроде). Получается, что nBorders[2] - это не граница между панелями, а ширина границы каждой панели (?). psdk: