Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Обращение к документу из вида




Если взглянуть на код, сгенерированный AppWizard для нашего класса вида, можно заметить, что в нем уже есть фрагмент для получения указателя на объект документа с помощью метода GetDocument() класса вида. AppWizard присвоил этому указателю имя pDoc:

void CWelcomeView::OnDraw(CDC* pDC)

{

CWelcomeDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

}

ПРИМЕЧАНИЕ: Возможно, вы обратили внимание на строку ASSERT_VALID(pDoc) в приведенном выше фрагменте. Здесь Visual C++ вызывает макрос ASSERT_VALID и проверяет, что все прошло нормально и полученным указателем на документ можно пользоваться (макросом называется набор заранее написанных команд C++).

Обращение к welcome_string в объекте документа может выглядеть так: pDoc-> welcome_string; поэтому в итоге содержимое welcome_string будет отображаться следующим образом:

void CWelcomeView::OnDraw(CDC* pDC)

{

CWelcomeDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

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

}

Измененная программа будет работать, как положено и выводить наше сообщение. Разумеется, при таком маленьком объеме данных вряд ли стоит перемещать их из объекта вида в объект документа. Обычно для хранения данных в последнем находится одна, причем довольно веская причина — возможность записать их на диске и затем прочесть. Давайте посмотрим, как это делается.

Сохранение данных на диске

Сохранение и загрузка данных будут подробно рассмотрены позднее, когда мы будем заниматься работой с файлами, но один из аспектов этих операций можно изучить прямо сейчас. В исходном файле документа, welcomeDoc.cpp, присутствует метод Serialize():

void CWelcomeDoc: :Serialize(CArchive& ar) {

if (ar.IsStoring())

{

// TODO: добавьте код сохранения данных

}

else

{

// TODO: добавьте код загрузки данных

} }

В нашей программе уже есть несколько встроенных команд меню для работы с файлами: Save, Save As и Open. Программа берет на себя почти всю работу по сохранению файла на диске, но мы должны изменить ее текст так, чтобы она сохраняла и наш объект welcome_string. Методу Serialize() передается объект с именем ar; с ним можно работать точно так же, как и с потоком coutв предыдущем разделе. В частности, для сохранения объекта welcome_string при записи данных на диск и для его последующего чтения при загрузке данных с диска следует добавить следующий фрагмент: 

void CWelcomeDoc::Serialize(CArchive& ar)  

{

if (ar.IsStoring())

{

аг<< welcome_string;

}

else{

 ar >>welcome_string;   

}

}

Теперь пользователь сможет сохранить документ на диске и загрузить его оттуда. Позднее мы рассмотрим эту тему более подробно, а для начала хватит и этого.

Работа с клавиатурой

Ранее мы приступили к работе с Visual C++ и написали программу, которая создает и отображает собственное окно, а также выводит в нем сообщение. Другими словами, мы обеспечили возможность вывода информации для пользователя. Этот раздел будет посвящен вводуинформации, а конкретнее — получению символов с клавиатуры и отображению их в окне.

Дело даже не в клавиатуре и не во вводе символов. Важнее то, что мы научимся обрабатывать сообщения Windows - в данном случае от клавиатуры. Поскольку все наши программы управляются событиями (то есть реагируют на щелчки мышью, нажатия клавиш, выбор команд меню и т. д.), это станет лишь первым шагом на длинном пути. Мы научимся пользоваться ClassWizardдля того, чтобы сопоставить полученному сообщению Windows метод, называемый обработчиком сообщения.В нашем примере для сообщения Windows WM_CHAR будет использоваться обработчик с именем OnChar(). Это означает, что при нажатии клавиши пользователем программа будет вызывать метод OnChar().

Начнем с ввода символов.

В первом примере мы будем читать символы с клавиатуры и отображать их в клиентской области окна (то есть виде) по мере получения ввода от пользователя.

В этом примере мы научимся получать символы с клавиатуры, а также начнем использовать сообщения Windows.

Наша программа будет называться keystrokes. Создайте ее с помощью MFC AppWizard, выберите в AppWizardинтерфейс SDI(переключатель Single Document Interface (SDI)) и присвойте программе имя keystrokes.

Работа над программой делится на два этапа — сначала мы готовим место (буфер) для хранения полученных символов, а потом организуем их чтение с клавиатуры. (Итак, прежде всего, нужно создать место для введенных символов и для собираемой из них текстовой строки.)










Последнее изменение этой страницы: 2018-04-12; просмотров: 395.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...