вторник, 29 сентября 2009 г.

Day 4: MFC stuff

По умолчанию CListBox не умеет прокручивать по горизонтали. Для того чтобы обойти это ограничение, необходимо добавить код, который будет считать максмимальную длинну строк и через CListBox::SetHorizontalExtent сдвигать содержимое.

void UpdateHorizBarWidth( const CString & item )
{
CClientDC dc(this);

CFont * pFont = CListBox::GetFont();
dc.SelectObject(pFont);

CSize size = dc.GetTextExtent(item);
size.cx += 3 * ::GetSystemMetrics(SM_CXBORDER);

if( size.cx > MaxWidth )
{
MaxWidth = size.cx;
CListBox::SetHorizontalExtent(MaxWidth);
}
}
_Winnie C++ Colorizer


Ес-но придется вызывать foreach UpdateHorizBarWidth при каждом изменении данных ListBox.