Форум — Ответы ( К темам )
? | 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. а жаль — надоели однотипные интерфейсы , а рисовать свои контролы или скины как-то душа не лежит |