Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Обращение к документу из вида
Если взглянуть на код, сгенерированный 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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |