C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 31. Связывание Вида и Документа / Уроки MFC / Visual C++

Visual C++. MFC
Урок 31. Связывание Вида и Документа

Это занятие посвящено тому, как организовать связь между документом и видом. Напомним, что в соответствии с концепцией Документ-Вид в классе Документа данные хрянятся, а класс Вида ответственен за показ данных на экране (это, конечно, очень упрощено, но для этого урока хватит и этого).

Итак, возьмите программу, созданную на прошлом уроке. Так так именно класс Документа хранит данные, то заведите в нем некоторую переменную для данных, например типа int:

class CMyDoc: public CDocument{
...
public:
    int m_nNum;//данные
};

Для упрощения мы пометили эти данные в public-секции класса (надо бы в protected или в private, да лень возиться с дополнительными функциями).

Далее где-нибудь задайте начальное значение для нашей переменной. Например, в конструкторе:

    ...
    CMyDoc(){
        m_nNum=123;
    };
    ...

Теперь переходим к классу Вида. Добавляем в него метод GetDocument():

class CMyView: public CView{
...
public:
    CMyDoc* GetDocument();
    ...

Обратите внимание на тип возвращемого значения для нашего метода - это указатель на класс документа: CMyDoc*.

Пишем теперь реализацию этого метода:

CMyDoc* CMyView::GetDocument()
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
    return (CMyDoc*)m_pDocument;
}

Здесь есть одна проблема - мы в этом методе используем наш класс Документа, но по тексту программы он расположен ниже класса Вида, так что компилятор нашего класса Документа в этом месте еще не увидит (правила "сначала вводим, а затем используем" пока никто не отменял). Выход очень простой - просто перенесите класс Документа выше - разместите его перед классом Вида.

Теперь осталось только написать код, который продемонстрирует нам, что связь между Документом и Видом есть. Например, это можно сделать в OnDraw:

void CMyView::OnDraw(CDC *pDC){
    //Заводим временную переменную
    CString s;
    //Получаем указатель на документ
    CMyDoc* pDoc=GetDocument();
    //Записываем данные из документа в переменную
    s.Format("%d", pDoc->m_nNum);
    //Выводим переменную в окно
    pDC->TextOut(10, 10, s);
}

А вот и результат нашей программы:

Окно программы

Связь между Документом и Видом установлена.