Вертикальная полоса прокрутки в CListCtrl
Вопрос
Я использую CListCtrl в представлении значков, но он прокручивается горизонтально:
1 3 5 7 -->
2 4 6 8 -->
Я бы предпочел прокрутить его горизонтально:
1 2
3 4
5 6
| |
V V
Есть ли способ сделать это?
Решение
Измените стиль выравнивания в конструкторе слева направо.
Другие советы
Кажется, я решил проблему с помощью представления «Отчет». С помощью VS Designer это означает изменение стиля «Вид» на «Отчет», в результате чего элемент управления получает атрибут LVS_REPORT в файле .RC. Обратите внимание, что это эквивалентно вызову CListCtrl :: SetView (LV_VIEW_DETAILS)
в коде. Однако этого недостаточно. Также необходимо создать столбец, если у вас его еще нет с парой строк кода:
m_lstScenarios.InsertColumn(0, L"NO HEADER");
m_lstScenarios.SetColumnWidth(k_nListColScenario, LVSCW_AUTOSIZE);
Если вам не нужен заголовок столбца, задайте LVS_NOCOLUMNHEADER в конструкторе с помощью стиля «Без заголовка столбца».
В редакторе диалоговых окон Visual Studio убедитесь, что у вас есть " Список элементов управления " не "Список".
В списке свойств редактора диалогов Visual Studio установите " Без заголовка столбца " Верно и " Просмотреть " сообщить. (Настройка «Выравнивание» по левому краю не действует в режиме отчета.)
В OnInitDialog ()
сделайте следующее (после вызова OnInitDialog ()
вашего суперкласса):
CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
plistError->InsertColumn( 0, "" );
plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
Фактически это дает максимальный автоматический размер начальной ширины, с которой создается элемент управления. Строки отображаются усеченными с многоточием в этой точке. Расширение окна не помогает.
Чтобы исправить это, добавьте метод OnSize ()
в свой подкласс CDialog
, который снова напоминает список, что он шире. (Это предполагает, что расширение окна - это то, что позволило бы CListCtrl
отображать больше текста. Если у вас есть другие средства, например кнопка, попробуйте этот вызов SetColumnWidth ()
, где ты это делаешь.)
WinProgress::OnSize() {
CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
Затем вы можете добавить новые строки в конец списка с помощью следующего кода:
CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
int iCount = plist->GetItemCount();
plist->InsertItem( iCount, "Next Item" );
Элементы, слишком широкие для списка, сначала будут отображать эллипсы. Если вы немного измените размер окна, то элементы списка будут расширены до полного размера и при необходимости появится горизонтальная полоса прокрутки. Это не совсем 10/10, что касается внешнего вида, но даже опытные программисты GUI, вероятно, не заметят.
В списке управления, чтобы отобразить содержимое с изображением в одном столбце с вертикальной полосой прокрутки. Добавьте следующий код В функции PreCreateWindow добавьте следующую строку cs.style | = (LVS_REPORT | LVS_NOCOLUMNHEADER); и в функцию OnIntialUpdate добавьте следующую строку, fileList.InsertColumn (0, ", LVCFMT_LEFT | LVCFMT_IMAGE, 120, -1); ShowScrollBar (SB_VERT, 1); после этого, где бы вы ни захотели вставить данные в список, вы можете, но позаботиться о том, чтобы вы установили список изображений, а затем вставили данные с помощью insertitem, например: FileList, InsertItem (0, & Quot; Индия & Quot;, 1); где 1- > индекс изображения в списке изображений.