Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Iren
Сообщений: n/a
#1

Как работает функция DrawItem? - C++

06.02.2008, 13:48. Просмотров 1194. Ответов 1
Метки нет (Все метки)

1.Объясните пожалуйста как работает функция DrawItem
2.Почему, даже когда я не пишу никакой обработки в этой функции, при запуске приложения вываливается окно с ошибкой, ссылающееся на макрос ASSERT? что это значит и как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2008, 13:48     Как работает функция DrawItem?
Посмотрите здесь:

C++ Как работает функция?
Не понимаю как работает эта функция C++
Как работает функция strtok C++
C++ Как работает эта функция?
C++ Объясните как работает хеш-функция
C++ Как работает функция sort(); ?
C++ Как работает шаблонная функция countof?
Не понимаю как работает функция malloc C++
Функция printf () как это работает C++
C++ Как работает функция в с++?
C++ Как работает эта функция?
Как работает рекурсивная функция C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Snork
Сообщений: n/a
06.02.2008, 17:50     Как работает функция DrawItem? #2
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );

См. описание этой структуры (LPDRAWITEMSTRUCT) в МСДН или поставь селектор (->) в теле этой ф-ции после экземпляра, чтоб просмотреть все члены (поля). Там хранится описание, какой объект рисуется (константы ODT_), его номер и всякая полезная инфа. Ошибка с Ассертом - скорее всего, какой-то элемент на форме имеет свойство OwnerDraw. Это значит, что он себя не рисует (для убедительности в тело ф-ции отрисовки включили макрос ASSERT), рисовать его должен либо перегруженный метод дериватива, либо родитель. Я предпочитаю последний вариант. Тогда делать надо так:

1)На окно ложить элемент управления, присваивать ему стиль OwnerDraw.
2)Использовать (если надо) СТАНДАРТНЫЙ, MFC-шный класс переменной. (Мы ведь используем вариант с родителем, а не деривативный).
3)В классе окна-родителя отследить сообщения WM_MEASUREITEM, WM_DRAWITEM и (если надо) WM_COMPAREITEM.
4)В методах On...() провести соответственно установку размера, отрисовку и сравнение итемов.

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

Хочу порекомендовать вот что. Взять UltimateToolbox и копаться у него в сырцах. Лучший учебник по MFC. Круглински (царство ему небесное) сотоварищи отдыхают. Там много всего сделано через этот метод.
Yandex
Объявления
06.02.2008, 17:50     Как работает функция DrawItem?
Ответ Создать тему
Опции темы

Текущее время: 18:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru