Создание окна List View
Окно органа управления List View создается функцией CreateWindowEx на базе класса окна WC_LISTVIEW , например так:
hwndList = CreateWindowEx(0L, WC_LISTVIEW, "", WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT | LVS_EDITLABELS, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hWnd, (HMENU)IDC_LISTVIEW, hInst, NULL);
Перед вызовом этой функции вы должны загрузить в память DLL-библиотеку COMCTL32.DLL , для чего следует вызвать функцию InitCommonControls без параметров.
В дополнение к обычным стилям окна, таким как WS_VISIBLE, WS_CHILD и WS_BORDER, необходимо указать специальные стили с префиксом имени LVS_, определяющие внешний вид и поведение органа управления List View. Как минимум, следует указать один из следующих четырех стилей: LVS_REPORT , LVS_ICON, LVS_SMALLICON или LVS_LIST.
Ниже мы привели краткое описание этих, а также остальных стилей окна List View.
Стиль | Описание |
LVS_REPORT | Список отображается в виде детального отчета, состоящего из нескольких столбцов (рис. 3.1) |
LVS_ICON | Список отображается в виде окна с пиктограммами стандартного размера (рис. 3.2) |
LVS_SMALLICON | Список отображается в виде окна с пиктограммами уменьшенного размера (рис. 3.3) |
LVS_LIST | Простой список с пиктограммами уменьшенного размера (рис. 3.4) |
LVS_ALIGNLEFT | Используется вместе с LVS_ICON и LVS_SMALLICON. Если указан этот стиль, пиктограммы будут выровнены по левой границе |
LVS_ALIGNTOP | Используется вместе с LVS_ICON и LVS_SMALLICON. Если указан этот стиль, пиктограммы будут выровнены по верхней границе. Стиль LVS_ALIGNTOP используется по умолчанию |
LVS_AUTOARRANGE | Используется вместе с LVS_ICON и LVS_SMALLICON для выполнения автоматического размещения пиктограмм внутри окна органа управления List View |
LVS_NOSCROLL | Отключение возможности свертки содержимого окна органа управления List View |
LVS_EDITLABELS | Этот стиль позволяет пользователю редактировать название элемента списка. Если указан стиль LVS_EDITLABELS, приложение должно обрабатывать извещение LVN_ENDLABELEDIT, которое будет описано позже |
LVS_NOCOLUMNHEADER | Если указан стиль LVS_NOCOLUMNHEADER, в режиме детального просмотра не отображается заголовок столбцов, с помощью которого выполняется сортировка и изменение размера столбцов |
LVS_NOLABELWRAP | Подпись под пиктограммами отображается в одной строке |
LVS_NOSORTHEADER | Если указан этот стиль, с помощью заголовка окна невозможно выполнить сортировку столбцов в режиме детального просмотра |
LVS_OWNERDRAWFIXED | Стиль позволяет родительскому окну выполнить рисование содержимого списка. Для этого родительское окно должно обрабатывать сообщение WM_DRAWITEM |
LVS_SHAREIMAGELIST | Этот стиль предназначен для организации совместного использования списков изображений несколькими органами управления List View |
LVS_SHOWSELALWAYS | Выбранные элементы списка отображаются с выделением даже в том случае, когда орган управления List View не активен |
LVS_SINGLESEL | Пользователь может выделить в списке только один элемент (по умолчанию можно выделить сразу несколько элементов) |
LVS_SORTASCENDING | Выполнение сортировки текстовых строк элементов в прямом порядке |
LVS_SORTDESCENDING | То же, но в обратном порядке |
Как мы уже говорили, стили LVS_REPORT, LVS_ICON, LVS_SMALLICON и LVS_LIST определяют режим работы органа управления List View. При создании этого органа управления вы должны указать только один из перечисленных стилей. Однако в дальнейшем если появится необходимость изменить режим работы, это можно будет легко сделать при помощи функций GetWindowLong и SetWindowLong .
Когда список отображается в виде окна со стандартными или уменьшенными пиктограммами, у вас есть возможность выбрать один из нескольких способов выравнивания пиктограмм во внутренней области этого окна. Для этого вы должны указать один из следующих стилей: LVS_ALIGNLEFT, LVS_ALIGNTOP или LVS_AUTOARRANGE.
По умолчанию (если не указан стиль LVS_ALIGNLEFT) пиктограммы выравниваются по верхней границе окна. Такое поведение соответствует стилю LVS_ALIGNTOP. Вы можете также выровнять пиктограммы по левой границе окна, задав стиль LVS_ALIGNLEFT. Разумеется, стили LVS_ALIGNTOP и LVS_ALIGNLEFT несовместимы, поэтому вы можете использовать только один из них.
Для пользователя будет удобнее, если при изменении размеров окна просмотра пиктограммы будут автоматически перемещаться таким образом, чтобы по возможности занимать всю полезную площадь окна. Вы можете организовать автоматическое размещение пиктограмм, указав стиль LVS_AUTOARRANGE. Без этого стиля пользователю придется работать с полосой просмотра (Scrollbar), что не всегда удобно.
Иногда необходимо заблокировать возможность изменения размеров окна просмотра, исключив стиль WS_BORDER. Например, вы можете создать окно просмотра фиксированного размера, расположенное в диалоговой панели. В этом случае вы не должны указывать стиль LVS_NOSCROLL, так как иначе пользователь не получит доступа ко всем элементам списка.