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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужен ли будет MFC, если Microsoft скоро выпускает технологию .NET? http://www.cyberforum.ru/cpp-beginners/thread465078.html
..
C++ Работа с SMTP сервером qmail Никак не могу побороть трабл при отправке письма через СМТП сервер, где стоит qmail: при выполнении примерно такого кода ArchiveWrite('DATA '); RETURN_ERROR(ArchiveFlush()); RETURN_ERROR(WaitForText('354')); ... ... ArchiveWrite(szMessage); http://www.cyberforum.ru/cpp-beginners/thread465077.html
C++ какое сообщение для ComboBox-а обрабатывать?
Здравствуйте. У меня есть диалоговое окно и в нем ComboBox. При выборе одного из элементов этого ComboBox-а мне необходимо автоматически изменять содержимое EditBox-а на этой-же форме. Вопрос в том, какое сообщение для ComboBox-а обрабатывать. Я перепробовал все, однако эти сообщения приходят до того как данные ComboBox-а обновятся, а мне надо как-раз сразу после обновления. Заранее благодарен.
Как пользоваться элементами управления нового стиля XP? C++
Доброго всем времени суток! Господа, как пользоваться элементами управления нового стиля XP (в частности кнопками)? Т.е. поместил я кнопку на диалог или создал ее Create'ом, как заставить ее отображаться подобно родным XP-ешным кнопкам? Снорк
C++ База данных с помощью MS DataGrid и MS Remote Control 2.0 http://www.cyberforum.ru/cpp-beginners/thread465021.html
У меня вопрос, вобщем ситуация такая: Установил MS DataGrid и MS Remote Control 2.0 в DataSource ставлю пользовательский источник ODBC, а в DataGrid->Source ставлю идентификатор MS Remote control. Запускаю, - связи нету. Видимо не работает Remote Control. Захожу в опции Remote Control, смотрю DataSource стоит нет, снова ставлю, перекомпилирую - опять нет!!! Что делать! Такое чувство будто...
C++ Если кто знаком со средствами Lex/Yacc отзовитесь ? Мне необходимо написать интерпритатор некоторого языка, у меня проблема с распознованием конструкций типа while. Объясните пожалуйста каким образом заставить Yacc возвращаться на некоторое число шагов назад. Вернее я пользуюсь средством bison. Или если знаете ссылочку где обсуждают интерпритаторы, пришлите пожалуйста. С уважением, Евгений. подробнее

Показать сообщение отдельно
Snork
Сообщений: n/a
06.02.2008, 17:50     Как работает функция DrawItem?
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );

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

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

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

Хочу порекомендовать вот что. Взять UltimateToolbox и копаться у него в сырцах. Лучший учебник по MFC. Круглински (царство ему небесное) сотоварищи отдыхают. Там много всего сделано через этот метод.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru