Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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);
 
 }

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

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

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS