Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CView::OnUpdate, Архитектура документ-вид 
:(
    Опции темы
Амортизатор
Дата 10.8.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



До этого для объявления недействительного прямоугольника просто вызывал InvalidateRect в нужном месте программы. Однако в архитектуре документ вид для этого (в том числе) предназначена ф-ция OnUpdate, вызываемая для каждого вида функцией CDocument::UpdateAllViews.

Цитата из Круглинского
Цитата
Исходная версия OnUpdate объявляет недействительным ВСЕ окно представления. Однако ее можно перегрузить и объявить недействительным окно меньшего размера. Для этого используются 2 последних параметра OnUpdate.


Вопрос: как именно передаются из документа эти параметры? Я думаю, что в классе, производном от CDialog, перегружается ф-ция UpdateAllViews, которой в качестве параметров передаются параметры недействительного прямоугольника. Так ли это?


--------------------
Поехали!
PM MAIL   Вверх
Earnest
Дата 11.8.2005, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ты путаешь теплое с мягким. Насчет InvalidateRect все ты делал правильно, и нечего тут мудрить. CView::OnUpdate предназначена вовсе не для этого. Это способ сообщить виду, что в документе что-то изменилось, а нужно ли ему перерисовываться и как, вид решает сам на основании переданных параметров.
Причем, если решает, что нужно, сам себе вызывает InvalidateRect (ну это уж как напишешь, по умолчанию - все окно).

UpdateAllViews - это метод документа, а не диалога.
С параметрами все просто - они там произвольные, передавай, что хошь. Обычно в целочисленный параметр передают флаги, которые помогают понять, что указателе.

Например. Есть документ, содержащий 2 вида данных: набор графических объектов, и каку-нибудь таблицу. Соответственно, есть 2 вида, окно с графикой и таблица. Причем, какие из видов созданы, и в каком количестве, документу заботиться не надо - у него есть просто список всех открытых видов, в виде указателей на базовый класс. Скажем, что-то изменилось в таблице (получили новую порцию данных, или пользователь строку добавил, или еще что-нибудь). Чтобы отобразить изменения, документ должен послать через UpdateAllViews запрос на обновление всем своим окнам. А через параметры он сообщает, что именно изменилось. Скажем, в целый аргумент пишем флаг TABLE_CHANGED. Получив такое сообщение, графическое окно его игнорирует, а табличное - перерисовывается. Соответственно, у тебя есть еще флаг VECTOR_CHANGED для обновления графики.
Т.е., надеюсь, понятно, что все это ты должен написать сам - если задача требует, а MFC-framework просто предоставляет тебе некоторые рамки и инфраструктуру.


--------------------
...
PM   Вверх
Амортизатор
Дата 11.8.2005, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

Репутация: нет
Всего: 8



Спасибо, Earnest, объяснила мне, темному... smile


--------------------
Поехали!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.