http://tikitak.narod.ru ---- Главная страница сайта
Шаг 72 - Тренировка - приложение Pr1
Это будет очень простое приложение. Но оно будет уметь
выводить строку на экран :-).
Это и есть американская метордика :-)
Когда об одном и том же 100 раз :-) но по разному !!!!
Генерируем приложение
Запускайте VC. Выбирайте MFC AppWizard и дайте приложению имя Pr1.
Шаг 1 мы выберем Single document - документ с одним окном. Теперь можете смело жать Finish всё остальное оставим по умолчанию. Полюбуйтеть на диалоговое окно с информацией и закройте его. Выберите пункт меню Build - Build Pr1.exe. После генерации приложения давайте его запустим. Build, а далее Execute Pr1.exe. У Вас должно быть примерно такое окно.
Кодируем
Что-ж окно есть. А теперь нам надо выводить строку в окно. Для этого нам нужно завести переменную типа CString, в которой будет храниться строка. Вопрос где её заводить? Для этого есть класс документа. Там должны храниться все данные. Перейдите в окно ClassView, там вы увидите класс CPr1Doc именно в нем и должна храниться наша переменная.
Щелкните правой кнопкой мыши на классе CPr1Doc и выбирите Add Member Variable. Этот пункт меню позволяет добавлять перенные к классу. В поле Variable Type введите CString, а в поле Variable Name - m_string. Для простоты в поле Access, то есть доступ, оставим Public. Теперь всё готово, жмем OK. Ваша переменная появится в списке методов и данных класса.
А что произошло в коде ? Щелкните 2 раза на имени m_string и Вы попадете на её описание в классе в файле Pr1Doc.h
....
// 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)
return TRUE;
}
Замените коментарии Todo: на команду заполнения строки m_string = " Первые шаги лучший сайт !"; Вот так.
BOOL CPr1Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_string = " Первые шаги лучший сайт!";
return TRUE;
}
Следующая задача вывести эту строку на экран. Отображения класса документа (CPr1Doc) производится классом CPr1View и методом этого класса OnDraw. Переключитесь на класс VPr1View и шелкните два раза на методе OnDraw. Вот код.
void CPr1View::OnDraw(CDC* pDC)
{
CPr1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
Здесь для отрисовки передается контекст устройства через переменную pDC и получается класс документа в переменную pDoc, используя функцию GetDocument().
Поменяйте код.
void CPr1View::OnDraw(CDC* pDC)
{
CPr1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->DrawText(pDoc->m_string,CRect(10,10,300,100),DT_CENTER);
}
Компилируйте и запускайте.
Выводы
Попробуем сделать выводы. Ну первое, AppWizard многое делает за Вас. Данные храняться в классе документа (CPr1Doc) и для их наличия необходимо к этому классу добавить переменный. Переменный надо инициализировать. Для этого инициализацию нужно сделать в методе OnNewDocument класса документа. Отображаются данные в классе вида (CPr1View). Для их отображения используется метод OnDraw.
Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|