Чтение онлайн

на главную - закладки

Жанры

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

y += 1; // визуальный эффект нажатия кнопки

uEdge = EDGE_SUNKEN;

}

break;

case ODA_FOCUS:

if (pis->hwndItem == GetFocus) {

memcpy(&rFocus, &pis->rcItem, sizeof(RECT));

rFocus.left += deflate;

rFocus.top += deflate;

rFocus.right -= deflate;

rFocus.bottom -= deflate;

bFocus = TRUE;

}

break;

}

DrawState(pis->hDC, NULL, NULL, (LONG)hBm, 0, x, y, 0, 0, DST_BITMAP | uState);

DrawEdge(pis->hDC, &pis->rcItem, uEdge, BF_RECT);

if (bFocus) DrawFocusRect(pis->hDC, &rFocus);

 }

}

Выигрыш

подобного подхода состоит в меньшем использовании самостоятельно подготавливаемых ресурсов и меньшем их потреблении при работе программы. К недостаткам (и весьма заметным, на мой взгляд) можно отнести то, что происходит потеря контроля над внешним видом кнопки в различных ее состояниях. Впрочем, работа этих упомянутых функций ориентирована на поддержание стандартного внешнего вида контролов, поэтому и результат не очень выразителен. На мой взгляд, данная техника больше подходит к выполнению кнопок, имеющих в основном стандартный внешний вид, но снабженных небольшими изображениями по соседству с текстом кнопки.

Следует заметить , что при необходимости можно (а иногда и нужно) пользоваться комбинацией приведенных методик: предположим, использовать для отрисовки чертыре битмапа, но границу рисовать функцией DrawEdge.

При подготовке данного материала мною использован код, опубликованный в одном из сообщений эхоконференции SU.WIN32.PROG (FidoNet). Автор кода – Dmitry Timoshkov <[email protected]> – вполне может и не узнать его, поскольку код был мною довольно сильно переработан и дополнен :-))).

На сегодня все. До встречи!

Алекс Jenter [email protected] Красноярск, 2001. Рассылка является частью проекта RSDN.

Программирование на Visual C++

Выпуск №51 от 21 октября 2001 г.

Здравствуйте, уважаемые подписчики!

Наконец-то вы дождались нового сезона выхода рассылки! Вы наверное уже наверняка заметили, что отпуск немного (честно говоря, намного) затянулся. Это связано с моим переездом – получилось так, что мне повезло выиграть стипендию на прохождение магистерской программы в немецком университете. В такой ситуации без всяческих проблем не обойтись, и надо сказать адаптация в Германии заняла гораздо больше времени, чем я рассчитывал. Да и интернет тут у меня появился совсем недавно. Так что прошу прощения за столь долгую отлучку. Теперь все в порядке, и рассылка опять будет набирать обороты.

Видя, что рассылка так долго не выходит, меня спрашивали, не нужна ли помощь. Отвечаю – помощь всегда нужна! Сейчас помощь больше всего нужна сайту RSDN – в том смысле, что нам не хватает талантливых людей, готовых вести разделы на сайте, верстать статьи и пр. и пр. Если вы чувствуете

себя в силах помочь – милости просим, пишите на [email protected]!

И еще один организационный вопрос. Рассылка, как и раньше, будет выходить один раз в неделю и предположительно по воскресеньям, хотя день может и меняться.

Подключившись наконец к интернету и забрав накопившиеся письма, я узнал, что в выложенном мной перед уходом в отпуск chm-файле с архивом рассылки есть некоторые недоработки – а именно, с поиском. Это в принципе неудивильно, так как создавался этот файл достаточно спешно ;-) Я в ближайшее время постараюсь разобраться с этим.

Ну, это пока все, что я хотел сказать. Теперь – вперед, к вершинам мастерства!

СТАТЬЯ 

Использование ListView в режиме виртуального списка

Автор: Тимофей Чадов

Демонстрационная программа – 161 KB

Исходные тексты – 39 KB 

Все программисты делятся на тех, кто повсеместно применяет виртуальный режим, и тех, кто о нем даже и не слышал. Конечно, это шутка, как и любая с долей … шутки-) 

На таких сайтах как CodeGuru, есть несколько неплохих примеров применения виртуальных списков. Однако, многие программисты, с которыми мне приходится сталкиваться, лишь изредка прибегают к этой технике, ошибочно считая, что это если не извращение, то уж по крайней мере излишество. Многие заблуждаются, считая, что применение виртуальных списков необходимо только лишь в случаях больших массивов данных, например, при отображении информации из баз данных. Конечно это справедливо, однако, о чем действительно часто забывают – применение виртуальных списков позволяет не только повысить производительность, но и обеспечивает разделение данных и их представлений. Последнее, на мой взгляд, не менее важно. 

Конечно, как и везде, нужно знать меру. Не стоит сломя голову бежать переписывать свой код, если требуется вывести диалоговое окно для выбора десятков элементов: cойдет и обычный подход. Однако, если логика вашего приложения основана на применении представления на основе ListView с широкими возможностями по добавлению|удалению|редактированию, да к тому же большого объема записей, – стоит задуматься о виртуальном режиме. 

Итак, в этой статье я попробую приподнять завесу тайны над этим чудесным режимом. Вы готовы к путешествию в виртуальность?

Виртуальность это просто

Для работы с виртуальным списком в простейшем случае достаточно следующего:

• Создать виртуальный список

• Вовремя заботиться о количестве элементов

• По запросу списка заполнять элементы нужной информацией

В некоторых случаях возможно понадобятся и более сложные вещи:

• Кеширование

• Сортировка

• Быстрый поиск элементов

Итак, обо всем по порядку.

Переход в режим виртуальности

Чтобы включить режим "виртуальности", необходимо установить стиль LVS_OWNERDATA. Текущая версия библиотеки элементов управления не позволяет переводить список из обычного режима в виртуальный "на лету", поэтому установку данного стиля необходимо делать при создании элемента. Если вы использует редактор диалога достаточно отметить переключатель Owner Data на вкладке More Style в окне свойств List Control. В случае применения класса СListView следует перекрыть PreCreateWindow.

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки