Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2014, 12:05   #1
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию Document/View ввод данных.

Структура проекта содержит модель Документ(CMyD)/Представление(CMyV) и класс CMyDlg производный от CDialog. Не до конца понял логику: при выборе пункта меню, ну например "Добавить" (здесь и далее я предполагаю, некий абстрактный проект, детали не столь важны), я обрабатываю сообщение в классе CMyV (почему то есть правило не обрабатывать его в CMyD) и вызываю метод класса CMyD. В этом методе я показываю CMyDlg и получаю от пользователя данные, которые тут же заношу в оперативку и ... дальше у меня ступор. Мне необходимо внести полученные данные в CMyV, но получается как то глупо: из Представления я получаю ссылку на Документ, а из Документа мне нужно получить Представление... блин, зачем же стоило разделять на два класса, если потом возникает желание объединить их? Прошу Вас привести пример модели: где обрабатывать сообщение, получать данные, как организовать интерфейс между Документом и Представлением?
KemanSR вне форума Ответить с цитированием
Старый 29.08.2014, 12:43   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
В этом методе я показываю CMyDlg и получаю от пользователя данные, которые тут же заношу в оперативку и ..
Мы изменили модель(СMyD) внесли новые данные.

Теперь если мы хотим увидеть в представлении(CMyV) обновленные данные, то мы должны оповестить его о том что данные изменились (т.е. использовать ссылку из документа на представление(СMyV)).

В результате извещения представление принимает меры по изменению(обновлению) показа данных (используя ссылку из представления на документ СMyD).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.08.2014, 13:37   #3
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

1. Да, спасибо, об этом я не подумал, т.е. использовать стандартные методы класса-предка типа UpdateAllViews. Но при этом нам не надо
Цитата:
Сообщение от evg_m Посмотреть сообщение
т.е. использовать ссылку из документа на представление(СMyV)
2. Почему не рекомендуют обрабатывать сообщения в карте CMyD?
KemanSR вне форума Ответить с цитированием
Старый 29.08.2014, 14:25   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
использовать стандартные методы класса-предка типа UpdateAllViews. Но при этом нам не надо
А чем пользуется UpdateAllViews (кому он рассылает извещения)
правильно тем View которые у него зарегистрированы (те самые ссылки из документа на View).

Цитата:
2. Почему не рекомендуют обрабатывать сообщения в карте CMyD
Чье сообщение тот и обрабатывает.
принцип автономности изменили структуру управления (набор кнопок) тут же изменили набор сообщений (от этих кнопок).
А потом при обработке сообщения транслируем действие в модель(вызываем ТОТ же что и ранее метод модели).

Итого мы меняем только представление и не трогаем модель.
ДВА разных представления ОДНОЙ модели имеют разный набор кнопок(сообщений) для вызова ОДНОГО действия с моделью.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.08.2014, 14:34   #5
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Выражаю большую благодарность за помощь.
KemanSR вне форума Ответить с цитированием
Старый 12.09.2014, 18:02   #6
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Какой из вариантов использовать для Doc/View архитектуры?
Вариант №1.
Код:
class CMyDoc{
const int size= 100;
int arr[size];
void Draw(CDC* pDC){
for(int i = 0; i < size; i++{
pDC->Выводим arr[i];
}
}
}
........................
void CMyView::OnDraw(CDC* pDC){
    GetDoc()->Draw(pDC);
}
Вариант №2.
Код:
class CMyDoc{
const int size= 100;
int arr[size];
}
........................
void CMyView::OnDraw(CDC* pDC){
    for(int i = 0; i < GetDoc()->size; i++){
        pDC->Выводим GetDoc()->arr[i];
    }
}
}
KemanSR вне форума Ответить с цитированием
Старый 15.09.2014, 21:18   #7
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Не могу понять, прошу помочь.
Код:
class CElement
{
public:
    CElement();
    ~CElement();
    int m_iNum;
};

class CListElem
{
public:
    CListElem();
    ~CListElem();
    void AddElement(CElement* pElem);
private:
    vector<CElement> m_List;
};

// В классе документа
CListElem m_List;
Итак вопрос: как, не нарушая логику архитектуры документ/вид отобразить все элементы CElement хранимые в CListElem через CMyDoc в элементе CDC класса CMyView? Думаю, что варианты с использованием тысяч -> не правильны.
KemanSR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных из View в Controller (ASP.NET MVC) f333874 ASP.NET 0 25.07.2013 00:53
Получить view из document Samir_ Visual C++ 0 11.05.2012 22:38
Подключение к сайту, ввод данных, отправка данных. Hichigo Общие вопросы C/C++ 0 20.07.2010 20:24
Ввод данных policedog Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.05.2009 21:53