![]() |
|
|
![]()
|
|
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Вот не пойму,для кого нужно использовать сообщение?Ведь для многих достаточно перегрузить виртуальную функцию DrawItem() ?Может это нужно(можно) применять к тем элементам ,у кого нет этой функции(для кого нельзя перегрузить)?
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 1 Всего: 165 |
Как ты перегрузишь DrawItem в Win32Api?
--------------------
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Пардон,я не св той теме создал топик.Я про МФС
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 5 Всего: 49 |
А MFC есть враппер для API. Как ты думаешь, когда виртуальный метод DrawItem вызывается? Когда в MFC-шную оконную процедуру прийдет сообщение WM_DRAWITEM.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Да вопроса не поняли!!!!!! Когда вместо виртуальной функции нужно регистрировать сообщение и обрабатывать!В каких случаях! Это сообщение отредактировал(а) Coocky - 3.2.2005, 17:10 -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 5 Всего: 49 |
Желательно писать обработчик сообщения только в том случае, если используемый класс не имеет соответствующую виртуальную функцию-член, так как реализации этой функции в предках или реализации обработчика сообщения в предках могут содержать дополнительную логику, которую можно легко сломать. Например, все потомки класса-вида имеют виртуальную функцию OnDraw, которая вызывается и при отрисовке (WM_PAINT) и при выводе на печать. В библиотечном классе-предке в обработчике WM_PAINT создаётся контекст устройства, а потом вызывается OnDraw. Если неаккуратно написать собственный обработчик WM_PAINT, то эта схема ломается.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Ладно,поясню не книжными словами
Дело в том,что это сообщение посылается владельцу окна,если элемент требует перерисовки.Для большинства это происходит при свойстве OwnerDrawFixed. Однако давайте пойдем дальше.Как-то в одном из топиков про Маленькие тайны,МФС,я показывал ,как перерисовывается многие элементы.Для этого достаточно было перегрузить виртуальную функцию DrawItem() для класса элемента(хотя это можно сделать и в родителе).Ну учили меня в Академии так и учили.Так вот, в одном из топиков еще я писал,что что б расширить карту сообщений,достаточно создать для элемента потомка.Так вот,оказывается не все сообщения будут работать.WM_DRAWITEM-не будет никогда..WM_CTRLCOLOR-не будет никогда,оказывается нужно перегрузить виртуальную функцию OnChildNotify()..100% будут работать только отраженые сообщения-те,которые имеют знак = перед названием в Визарде. К чему я это.Да просто хочу узнать может кто просветить,как и что в этом вопросе.Сколько проблем возникаетЮкогда пытаеся обработать сообщение,а его нет.Кто знает,когда нужно применять виртуальные функции,а когда досточно сообщения? -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 1 Всего: 165 |
Я тебя окончательно не понял... Почему нельзя перегрузить DrawItem, в случае отсутствия ловить WM_DRAWITEM?
Но темку я перенесу --------------------
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
chipset
Ее можно перегрузить,только для тех,кому можно Там просто,в ответе,я писал (надо было лучше знаки препинания ставить А в своем классе это сообщение не обработать.Только через виртуальные функции.Так вот я хотел бы узнать-какие еще есть нюансы,по сообщениям?Я только знаю 2 - WM_DRAWITEM,и WM_CTRLCOLOR.Может какие еще надо обрабатывать перегрузкой?Ах да,еще WM_NOTIFY -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |