Шаг 72 - Тренировка - приложение Pr1

Создание проекта

Запускайте VC. Выбирайте MFC AppWizard и дайте приложению имя Pr1. Шаг 1 мы выберем Single document - документ с одним окном. Теперь можете смело жать Finish всё остальное оставим по умолчанию. Полюбуйтесь на диалоговое окно с информацией и закройте его. Выберите пункт меню Build - Build Pr1.exe. После генерации приложения давайте его запустим. Build, а далее Execute Pr1.exe. У Вас должно быть примерно такое окно.

72_1.gif (2200 b)

Создаем код

Что ж, окно есть. А теперь нам надо выводить строку в окно. Для этого нам нужно завести переменную типа CString, в которой будет храниться строка. Вопрос, где её заводить? Для этого есть класс документа. Там должны храниться все данные. Перейдите в окно ClassView, там вы увидите класс CPr1Doc именно в нем и должна храниться наша переменная. Щелкните правой кнопкой мыши на классе CPr1Doc и выберите Add Member Variable. Этот пункт меню позволяет добавлять пененные к классу. В поле Variable Type введите CString, а в поле Variable Name - m_string. Для простоты в поле Access, то есть доступ, оставим Public. Теперь всё готово, жмем OK. Ваша переменная появится в списке методов и данных класса.

72_2.gif (14163 b)

А что произошло в коде? Щелкните 2 раза на имени m_string и Вы попадете на её описание в классе в файле Pr1Doc.h

..........
//}}AFX_VIRTUAL
// Implementation
public:
CString m_string;
virtual ~CPr1Doc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
........

Теперь нам необходимо инициализировать её содержание. Лучше сделать это в методе OnNewDocument. Этот метод будет всегда вызываться, когда создаётся новый документ. Щелкните на этом методе два раза. Здесь будет код.

BOOL CPr1Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// Добавите код для инициализации
// (SDI documents will reuse this document)
// SDI будут повторно использовать этот документ.
return TRUE;
}

Замените комментарии Todo: на команду заполнения строки m_string = " Первые шаги лучший сайт !";. Вот так!

BOOL CPr1Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_string = " Первые шаги лучший сайт !"; // инициализация
return TRUE;
}

Следующая задача вывести эту строку на экран. Отображения класса документа (CPr1Doc) производится классом CPr1View и методом этого класса OnDraw. Переключитесь на класс VPr1View и щелкните два раза на методе OnDraw. Вот код.

/////////////////////////////////////////////////////////////////////////////
// CPr1View drawing


void CPr1View::OnDraw(CDC* pDC)
{
CPr1Doc* pDoc = GetDocument(); // получить класс документа
ASSERT_VALID(pDoc); // проверить как получили
pDC->DrawText(pDoc->m_string,CRect(10,10,300,100),DT_CENTER); // вывести текст в контекст экрана
// взяв его из класса документа
}

Вот работающая программа.

72_3.gif (3035 b)

Описание

Попробуем сделать выводы. Ну, первое, AppWizard многое делает за Вас. Данные хранятся в классе документа (CPr1Doc) и для их наличия необходимо к этому классу добавить переменный. Переменные надо инициализировать. Для этого инициализацию нужно сделать в методе OnNewDocument класса документа, обратите внимание на то, что не в конструкторе. Дело в том каждый раз, когда создается новый документ, вызывается именно метод OnNewDocument, а не конструктор. Отображаются данные в классе вида (CPr1View). Для их отображения используется метод OnDraw.

Шпаргалка

Данные должны храниться в классе документа.

Получить документ из вида можно воспользовавшись функцией - GetDocument()

CPr1Doc* pDoc = GetDocument();					// получить класс документа
ASSERT_VALID(pDoc); // проверить как получили

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.