Вопрос

Я использую 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- > индекс изображения в списке изображений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top