Шаг 25.
Среда программирования Visual C++.
Создание простейшего приложения в архитектуре "документ/вид"

    На этом шаге мы рассмотрим различные примеры вывода значений переменных.

    Создадим однодокументное приложение Hello, описанное на 23 шаге.

    Изменим созданную мастером программу так, чтобы она выводила сообщение "Добро пожаловать в Visual C++!". Один из способов решения данной задачи состоит в изменении метода OnDraw() класса CHelloView (класса объекта вида, используемого для отображения данных). Этот метод вызывается тогда, когда нужно что-то вывести в клиентской области программы.

    Для изменения метода нужно на вкладке ClassView найти класс CHelloView и вывести его список методов. Переход к редактированию метода - двойной щелчок по имени метода. После изменения метод должен выглядеть следующим образом (в тексте реализации метода добавлены поясняющие комментарии):

void CHelloView::OnDraw(CDC* pDC)
{
    CString h="Добро пожаловать в Visual C++!";
    CHelloDoc* pDoc = GetDocument(); //Указатель на объект документа
    ASSERT_VALID(pDoc); //Макрос, проверяющий "правильность"                
                        //указателя на объект документа
    pDC->TextOut(0,0,h);//Вывод текста через указатель
                        //на контекст устройства
   // TODO: add draw code for native data here
}


Рис.1. Изменение метода CHelloView::OnDraw()

Текст этого приложения можно взять здесь (25,5 Кб).

    В приведенной программе данные (переменная h) хранились в объекте вида. Исправим программу так, чтобы данные находились в объекте документа. Для этого выполним следующие действия:

Текст измененного приложения можно взять здесь (27,6 Кб).

    Прокомментируем приведенные приложения.

    В первом приложении переменная h описывается в методе CHelloView::OnDraw(), поэтому для данного случая не требуется получать указатель на объект документа и проверять его правильность.

    Напомним, однако, что архитектура "документ/вид" разделяет данные и средства их обработки. Данная особенность продемонстрирована во втором приложении. Описанние переменной h расположено в классе CHelloDoc. Присваивание начального значения этой переменной осуществляется в конструкторе класса CHelloDoc().

    Вывод значения переменной h осуществляется в методе CHelloView::OnDraw() объекта вида. Однако прежде всего нужно связать объекты документа и вида. Поэтому сначала создается указатель pDoc, получающий адрес объекта документа с помощью функции GetDocument(). При выполнении этой функции возможно появление ошибок, поэтому после ее выполнения нужно проверить: действительно ли указатель pDoc содержит адрес объекта документа. Это достигается использованием макроса ASSERT_VALID(pDoc).

    Если все проверки завершились успешно, то можно приступать к выводу значения переменной h, тем более, что доступ к ней мы можем получить, используя указатель на объект документа.

    Но для вывода значения переменной h нужно иметь указатель на контекст устройства вывода, которым в нашем случае является клиентская область окна. Этот указатель передается нам как параметр CDC* pDC метода CHelloView::OnDraw().

    Таким образом, строка:

    pDC->TextOut(0,0,pDoc->h);

"расшифровывается" так: воспользоваться методом TextOut() контекста устройства, заданного указателем pDC, и вывести, начиная с точки с координатами (0,0) значение переменной h, находящейся в объекте документа, доступ к которому осуществляется через указатель pDoc."

    На следующем шаге мы рассмотрим еще одно приложение.




Предыдущий шаг Содержание Следующий шаг