Вертикальная полоса прокрутки в CListCtrl - PullRequest
1 голос
/ 27 ноября 2009

Я использую CListCtrl в виде значков, но он прокручивается по горизонтали:

1 3 5 7 -->
2 4 6 8 -->

Я бы предпочел горизонтальную прокрутку:

1 2
3 4
5 6
| |
V V

Есть ли способ сделать это?

Ответы [ 4 ]

3 голосов
/ 27 ноября 2009

Изменить стиль выравнивания в конструкторе с левого на верхний угол.

0 голосов
/ 07 мая 2019

В диалоговом редакторе 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, вероятно, не заметят.

0 голосов
/ 31 декабря 2013

В списке управления, чтобы отобразить содержимое с изображением в одном столбце с вертикальной полосой прокрутки. Добавьте следующий код, В функции 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, "Индия", 1); где 1-> индекс изображения в списке изображений.

0 голосов
/ 11 января 2013

Кажется, я решил проблему с помощью представления «Отчет». С помощью 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 в Designer через стиль «Без заголовка столбца».

...