Форум — Ответы     (  К темам )
 ?  ACD: горизонтальный скроллинг в TListBox (08-03-2003 03:31:50)
доброго времени суток.
У меня такая ситуация :в Listbox время от времени
добавляются и убираются строки.Некоторые длиннее
чем надо.В конструкторе формы написал :
listBox1->Perform(LB_SETHORIZONTALEXTENT, 1000, Longint(0));не действует — действует если вставмть после добавления строк но всеравно не то — ползунок то получается фиксированной длины.Помоему правильнее будет вставить "это" после добавления первой
строки а потом измерять TextExtent (так его кажется) самой длинной строки и соответственно изменять длину ползунка — если кто знает как это все сделать правильно
и красиво plz. поделитесь (текст должен быть именно в ListBox)

И еще вопрос а как собственно сделать все контролы на форме плоскими(особенно
скролбары в листбоксе) ?
Ctl3d- вроде не то?
 Devnvd (09-03-2003 17:49:32)
Добавление строки в ListBox, из примера SDK:
// ************************************************************************
// FUNCTION : ListBoxInsert( HWND, LPLONG, LPCTSTR )
// PURPOSE : Inserts the string into the listbox.
// COMMENTS : Returns the index of the string inserted
// ************************************************************************
LRESULT
ListBoxInsert( HWND hWndListBox, LPLONG lpMaxStrLen, LPCTSTR lpszString )
{
static LONG MaxTextExtent = 0;

LRESULT Index;

if( lpszString == 0L ) {
MaxTextExtent = 0;
SendMessage( hWndListBox, LB_SETHORIZONTALEXTENT, 0, 0 );
return( 0 );
}

if( hWndListBox != 0L ) {
HDC hDC;
SIZE Size;
LONG StrLen;

if( (StrLen = lstrlen( lpszString)) > *lpMaxStrLen )
*lpMaxStrLen = StrLen;
hDC = GetDC( hWndListBox );
GetTextExtentPoint( hDC, lpszString, StrLen, &Size );
ReleaseDC( hWndListBox, hDC );
if( Size.cx > MaxTextExtent ) {
MaxTextExtent = Size.cx;
SendMessage( hWndListBox, LB_SETHORIZONTALEXTENT, (WPARAM) (MaxTextExtent*1.1), 0 );
}
Index = SendMessage( hWndListBox, LB_ADDSTRING, 0, (LPARAM) lpszString );
SendMessage( hWndListBox, LB_SETCURSEL, Index, 0 );
}

return( Index );
}

По поводу плоскоты.
В Windows 1.0 все элементы были плоскими, этот интерфейс ужасно примитивен, и с появлением 3D всё стало намного приятнее. Что-же это вас тянет обратно быть "плоскими"? Если бы это действительно было необходимым, то Bill оставил бы для нас эту плоскосту изначально. Но сейчас в WinApi кроме FlatSB ничего нет. Да и к тому же:
Note Flat scroll bar APIs are implemented in Comctl32.dll versions 4.71 through 5.82. Comctl32.dll versions 6.00 and higher do not support flat scroll bars.
 ACD (10-03-2003 03:34:13)
to DEVNVD
>Note Flat scroll bar APIs are implemented in Comctl32.dll versions 4.71 through 5.82. Comctl32.dll versions 6.00 and higher do not support flat scroll bars.
а жаль — надоели однотипные интерфейсы , а рисовать свои контролы или скины как-то душа не лежит