воскресенье, 10 мая 2009 г.

Позиционный и не-позиционный виды в ListView

Это перевод Positioned vs. non-positioned listview views. Автор: Реймонд Чен.

Иногда мне попадаются вопросы, возникающие из-за непонимания разницы между позиционными (positioned) и не-позиционными (non-positioned) видами ListView. Вопрос обычно содержит строки наподобие: "Я вставляю новый элемент с помощью LVM_INSERTITEM, но он появляется в конце списка, а не в той позиции, что я указал".

Чтобы понять, что тут происходит, вам нужно знать, что некоторые виды отображения ListView являются "позициоными", а другие - "не-позиционными".

"Большие значки" ("(Large) icon view"), "Маленькие значки" ("Small icon view") и "Плитка" ("tile view") являются позиционными. Каждый элемент в этих режимах имеет свои собственные координаты, которые вы можете поменять с помощью сообщения LVM_SETITEMPOSITION. Когда добавляется новый элемент, он получает индекс, основанный на точке вставки, но его физическое расположение на экране определяется ближайшим свободным местом, не занятым другими значками. Существующие элементы не изменяют своего местоположения, чтобы вместить вставляемый элемент.

Другие режимы, "Список" ("list view") и "Таблица" ("report (aka details) view"), являются не-позиционными. В этих видах элементы не выбирают своего положения на экране. Вместо этого, позиция элемента определяется по его индексу. В не-позиционных видах, вставка или удаление элемента приводит к смещению всех следующих за ним элементов.

Теперь вы и сами можете ответить на этот вопрос. Почему вставляемый элемент показывался в конце списка, вместо позиции, указанной для него вызывающим?

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.