Элемент управления List добавляет пространство для изображения в столбец 0, если в последующих столбцах есть изображения - PullRequest
2 голосов
/ 24 августа 2010

Я столкнулся с проблемой с элементами управления списками Windows (я специально использую MFC, но похоже, что он применяется ко всем элементам управления списками в библиотеке общих элементов управления Windows).

В моем конкретном случае,Я хочу создать элемент управления списком, который имеет два или более столбцов.Первый столбец (0) предназначен только для текста и используется для того, чтобы пользователь мог перейти к записям, набрав текст в этой строке.Второй столбец (или три, или четыре, или что-то еще) имеет изображение (или изображение и текст; в любом случае).

Все это хорошо, и может быть легко сделано без проблем, однако окончательныйЗатем управление списком заканчивается пробелом слева от текста в столбце 0 (он может быть справа в системе RTL).Эта проставка зарезервирована для изображения, и я не могу найти способ предотвратить это.(Организация определенного порядка столбцов ничего не изменила.)

Оглядываясь вокруг, я обнаружил, что некоторые другие люди жалуются на то же самое, в частности эта тема , которая приводит к этомунить .Предложенное решение не работает, потому что, как было сказано, простое уменьшение ширины нулевого столбца просто обрезает текст, а не распорку изображения (плюс, тогда вы должны предотвратить и / или обработать любые изменения ширины столбца, которые пользователь пытается сделатьmake).

У кого-нибудь есть идеи, как исправить эту ошибку, если не написать элемент управления списком с нуля или использовать один из слишком необычных элементов управления сеткой в ​​CodeProject / CodeGuru / etc.?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 30 августа 2010

Столбец 0 является особенным в ListView. Как только вы назначите небольшой список изображений для ListView, элемент управления ожидает, что вы отобразите изображение в столбце 0, поэтому для него остается место.

Решения:

  1. сделать столбец 0 нулевой ширины, дать ему значение, которое вы хотите, чтобы пользователь мог печатать. Столбец 1 становится вашим «первым» текстовым столбцом. Столбцы 2+ предназначены для ваших изображений. Вам нужно стиль выбора полной строки, чтобы это работало. Да, вы должны запретить пользователю изменять размер столбца 0. Да, это боль.
  2. создайте столбец с изображением в виде столбца 0 и используйте LVM_SETCOLUMNORDERARRAY для изменения порядка отображения
  3. владелец рисует предметы.
  4. дать столбцу 0 значок (только для того, чтобы охватить все базы)
0 голосов
/ 26 августа 2010

Вы пытались изменить iIndent член LVITEM структуры?MSDN говорит:

iIndent
Версия 4.70.Количество ширины изображения для отступа элемента.Один отступ равен ширине изображения элемента.Следовательно, значение 1 делает отступ элемента по ширине одного изображения, значение 2 - двумя изображениями и т. Д.Обратите внимание, что это поле поддерживается только для элементов.Попытка установить отступ подэлемента приведет к сбою вызывающей функции.

...