Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > ScrollBar and ListView


Автор: Letchik 2.4.2010, 13:40
Всем привет!
Необходимо создать ListView с множеством колонок. На экране все не помещаются, поэтому нужен ScrollBar. Только вот как его добавить не понятно. Полазил по интернету и но кроме тем "как удалить горизонтальный scrollbar из listview" не нашёл.  smile  smile 
Может кто поможет? 

Автор: ZC1989 2.4.2010, 13:53
WS_HSCROLL - Создает окно, которое имеет горизонтальную линейку прокрутки.
WS_VSCROLL - Создает окно, которое имеет вертикальную линейку прокрутки.

Автор: Letchik 2.4.2010, 14:08
В стилях задавал эти параметры, но реакции никакой. (CreateWindowEx).

Автор: Alca 2.4.2010, 14:34
Код

CONTROL         "",IDC_LIST1,"SysListView32",LVS_LIST | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,39,88,227,168,WS_EX_LEFTSCROLLBAR

Автор: ZC1989 2.4.2010, 14:37
покажи как создаёшь?

Автор: Alca 2.4.2010, 15:12
Код

::SetWindowLong(listview.handle,GWL_STYLE, ::GetWindowLong(listview.handle,GWL_STYLE) | WS_HSCROLL);

::SetWindowPos(listview.handle,0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);

//::InvalidateRect(listview.handle, NULL, TRUE);


Добавлено @ 15:20
Код

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        Dim dword As Integer 
        'вообще выключить чтоб не мешало 
        ListView1.Scrollable = False 
        '1 метод Включить скролл 
        SetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE, GetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE) Or WS_VSCROLL Or WS_HSCROLL) 
        SetWindowPos(ListView1.Handle.ToInt32, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER) 
        '2 метод включить скролл 
        'ShowScrollBar(ListView1.Handle.ToInt32, 3, 1) 
        '3 
        'SetScrollInfo 
 
        'Проверка наличия скролов 
        dword = GetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE) 
        If (dword And WS_VSCROLL) Then 
            ' Debug.WriteLine("вертикальный скрол") 
        End If 
        If (dword And WS_HSCROLL) Then 
            ' Debug.WriteLine("горизональный скрол") 
        End If 
    End Sub


http://support.microsoft.com/kb/111011

Автор: Letchik 2.4.2010, 20:26
Товарищи! Всем спасибо за ответы!
Я нашёл ответ на свой вопрос. Дело в том, что мой ListView привязан к размеру окна с помощью вот такого обработчика
Код

    case WM_SIZE:
        
        GetClientRect(hwnd, &rc);

        MoveWindow(hList, 0, 44, rc.right, rc.bottom - 43, TRUE);

        break;


Обратите внимание на выделенный параметр. Раньше я не отнимал от rc.bottom 43 пикселя и ползунок был просто тупо спрятан. 
Совсем случайно это обнаружил. В жизни бы не догадался что причиной головной боли окажется такая глупость.
Всем спасибо  smile 

Автор: Alca 2.4.2010, 23:28
Ставь галочку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)