![]() |
|
|
![]()
|
|
| Амортизатор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 17.4.2005 Где: в Караганде Репутация: нет Всего: 8 |
До этого для объявления недействительного прямоугольника просто вызывал InvalidateRect в нужном месте программы. Однако в архитектуре документ вид для этого (в том числе) предназначена ф-ция OnUpdate, вызываемая для каждого вида функцией CDocument::UpdateAllViews.
Цитата из Круглинского
Вопрос: как именно передаются из документа эти параметры? Я думаю, что в классе, производном от CDialog, перегружается ф-ция UpdateAllViews, которой в качестве параметров передаются параметры недействительного прямоугольника. Так ли это? -------------------- Поехали! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ты путаешь теплое с мягким. Насчет InvalidateRect все ты делал правильно, и нечего тут мудрить. CView::OnUpdate предназначена вовсе не для этого. Это способ сообщить виду, что в документе что-то изменилось, а нужно ли ему перерисовываться и как, вид решает сам на основании переданных параметров.
Причем, если решает, что нужно, сам себе вызывает InvalidateRect (ну это уж как напишешь, по умолчанию - все окно). UpdateAllViews - это метод документа, а не диалога. С параметрами все просто - они там произвольные, передавай, что хошь. Обычно в целочисленный параметр передают флаги, которые помогают понять, что указателе. Например. Есть документ, содержащий 2 вида данных: набор графических объектов, и каку-нибудь таблицу. Соответственно, есть 2 вида, окно с графикой и таблица. Причем, какие из видов созданы, и в каком количестве, документу заботиться не надо - у него есть просто список всех открытых видов, в виде указателей на базовый класс. Скажем, что-то изменилось в таблице (получили новую порцию данных, или пользователь строку добавил, или еще что-нибудь). Чтобы отобразить изменения, документ должен послать через UpdateAllViews запрос на обновление всем своим окнам. А через параметры он сообщает, что именно изменилось. Скажем, в целый аргумент пишем флаг TABLE_CHANGED. Получив такое сообщение, графическое окно его игнорирует, а табличное - перерисовывается. Соответственно, у тебя есть еще флаг VECTOR_CHANGED для обновления графики. Т.е., надеюсь, понятно, что все это ты должен написать сам - если задача требует, а MFC-framework просто предоставляет тебе некоторые рамки и инфраструктуру. -------------------- ... |
|||
|
||||
| Амортизатор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 17.4.2005 Где: в Караганде Репутация: нет Всего: 8 |
Спасибо, Earnest, объяснила мне, темному...
-------------------- Поехали! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |