Главная » Все файлы » Просмотр файлов из архивов » Документы » 8 Однодокументное приложение

8 Однодокументное приложение (Лекции по курсу ПОУК-1)

2017-12-28СтудИзба

Описание файла

Файл "8 Однодокументное приложение" внутри архива находится в папке "Лекции по курсу ПОУК-1". Документ из архива "Лекции по курсу ПОУК-1", который расположен в категории "". Всё это находится в предмете "программное обеспечение управляющих комплексов (поук)" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "программное обеспечение управляющих комплексов (поук)" в общих файлах.

Онлайн просмотр документа "8 Однодокументное приложение"

Текст из документа "8 Однодокументное приложение"

12 стр. Лекция 8. Однодокументные приложения

Приложение с однодокументным интерфейсом (использование средств MFC AppWizard)

Рассмотрим проект однооконного приложение single, созданного с использованием средств MFC AppWizard. Пусть при его создании задавались следующие характеристики: приложение с однодокументным интерфейсом (SDI-приложение); возможность печати и предварительного просмотра документа; наличие панели управления (tool bar) и панели состояния (status bar); приложение не поддерживает ни технологию OLE, ни базу данных, ни сетевые технологии.

В состав проекта single входят следующие основные файлы (см. Приложение 2):

single.h - в этом файле перечислены другие включаемые файлы и описан главный класс приложения CSingleApp.

single.cpp - основной файл приложения. В нем определены методы основного класса приложения CSingleApp.

MainFrm.h - содержит описание класса окна-рамки (frame), который называется CMainFrame. Класс CMainFrame наследуется от базового класса CFrameWnd, определенного в библиотеке классов MFC.

MainFrm.cpp - файл содержит определение методов класса CMainFrame.

singleDoc.h - содержит описание класса документов приложения CSingleDoc.

singleDoc.cpp - включает определение методов класса CSingleDoc.

singleView.h - содержит описание класса окна просмотра приложения CSingleView.

singleView.cpp - включает определение методов класса CSingleView.

single.rc - файл ресурсов. В этом файле описаны все ресурсы приложения. Сами ресурсы приложения могут быть записаны в каталоге Res, расположенном в главном каталоге проекта.

resource.h - файл содержит определения идентификаторов ресурсов приложения.

res\single.ico - пиктограмма приложения.

res\single.rc2 - в этом файле определены ресурсы, которые нельзя редактировать с помощью редактора ресурсов среды Visual C++.

res\toolbar.bmp - файл содержит изображение кнопок панели управления toolbar.

StdAfx.h, StdAfx.cpp - использование этих файлов позволяет ускорить процесс повторного построения проекта.

readme.txt - текстовый файл, содержащий описание проекта. В нем кратко рассмотрен каждый файл, входящий в проект, перечислены классы приложения, а также представлена другая информация.

После построения проекта single и запуска полученного приложения на экране появляется главное окно приложения. Оно имеет меню, панели управления и состояния.

Некоторые из строк меню приложения уже работают. Например, когда выбирается из меню File строка Open, на экране появляется диалоговая панель для выбора файла. Можно выбрать любой файл и открыть его. Однако от этого изменится только заголовок окна приложения - в нем появится название открытого файла. Содержимое файла будет недоступно. Чтобы просматривать и изменять содержимое открытого файла, необходимо добавить специальный код. Решение этой проблемы будет рассматриваться далее.

Ресурсы приложения

Приложение с однооконным интерфейсом, созданное средствами MFC AppWizard, имеет гораздо больше ресурсов, чем приложение, использующее в качестве главного окна приложения диалоговую панель. В нем определены не только диалоговые панели и таблица текстовых строк, но и пиктограмма, меню, панель управления и таблица акселераторов.

Шаблон меню. В ресурсах приложения определен только один шаблон меню, имеющий идентификатор IDR_MAINFRAME.

Когда пользователь выбирает пункт меню, операционная система передает командное сообщение главному окну приложения. Большая часть строк меню IDR_MAINFRAME имеет стандартные идентификаторы, описанные в библиотеке MFC. Некоторые из команд, соответствующих этим идентификаторам, полностью обрабатываются MFC.

Панель управления toolbar. Многие современные приложения, в том числе все приложения, имеющие оконный интерфейс и созданные с использованием средств MFC AppWizard, имеют панель управления. Эта панель располагается, как правило, ниже меню главного окна приложения и содержит ряд кнопок.

Идентификаторы кнопок панели управления соответствуют идентификаторам некоторых строк меню приложения. Поэтому эти строки дублируют соответствующие строки меню.

Образ кнопок панели управления расположен в файле toolbar.bmp, записанном в подкаталоге res каталога проекта. Файл же описания ресурсов приложения single.rc включает себя соответствующий ресурс.

Пиктограмма. В файле ресурсов приложения single определена пиктограмма, представляющая минимизированное приложение. Точно такая же пиктограмма используется всеми приложениями, построенными на основе MFC AppWizard, вне зависимости от типа их интерфейса с пользователем.

Таблица текстовых строк. Одним из самых объемных ресурсов приложения является таблица текстовых строк. В ней определены названия главного окна приложения, строки, отображаемые в панели состояния, и т.д.

Ресурсы приложения содержат несколько блоков, описывающих таблицы текстовых строк. Рассмотрим их. Первый блок текстовых строк включает только одну текстовую строку, имеющую идентификатор IDR_MAINFRAME. В этой строке закодирована различная информация, относящаяся к типу документов приложения. Обычно для каждого типа документа приложения определена своя строка описания. Формирование этой строки выполняется MFC AppWizard на основании указанной при создании приложения информации.

Второй блок таблицы текстовых строк содержит строки с идентификаторами AFX_IDS_APP_TITLE и AFX_IDS_IDLEMESSAGE. Строка, имеющая идентификатор AFX_IDS_IDLEMESSAGE, отображается в панели состояния, когда приложение находится в ожидании.

Когда пользователь создает объект главного окна приложения, он может указать имя приложения. Если это имя не указано, то в качестве имени приложения используется строка, имеющая идентификатор AFX_IDS_APP_TITLE.

В третьем блоке текстовых строк определены несколько текстовых строк, имеющих стандартные идентификаторы. Эти строки используются для отображения различной информации в панели состояния.

Следующий большой блок текстовых строк содержит краткие описания каждой строки меню приложения. Идентификаторы этих строк соответствуют идентификаторам строк меню, которые они описывают:

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

Последний большой блок текстовых строк содержит краткие описания каждой строки меню системного приложения. Идентификаторы этих строк соответствуют идентификаторам строк меню, которые они описывают:

Диалоговая панель. В ресурсах приложения определена только одна диалоговая панель с идентификатором IDD_ABOUTBOX. Она содержит краткую информацию о приложении и отображается на экране, когда пользователь выбирает из меню Help строку About:

Таблица акселераторов. Для того, чтобы ускорить доступ к строкам меню приложения, MFC AppWizard добавляет в файл ресурсов таблицу акселераторов. Когда пользователь нажимает комбинацию клавиш, представленную в таблице акселераторов, приложению поступает командное сообщение с соответствующим идентификатором.

Замечание. При внимательном изучении ресурсов приложения можно заметить, что 4 типа ресурса приложения имеют элементы с одинаковыми идентификаторами. Существует меню, строковый ресурс, таблица акселераторов и пиктограмма, которые имеют один и тот же идентификатор IDR_MAINFRAME.

Классы приложения

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

MFC AppWizard создает для приложения, обладающего однооконным интерфейсом, четыре основных класса. Эти классы представляют основу любого однооконного приложения, созданного MFC AppWizard.

Класс приложения

Базовый класс

Описание

CsingleApp

CwinApp

Главный класс приложения

CmainFrame

CframeWnd

Класс главного окна приложения

CsingleDoc

Cdocument

Класс документа приложения

CsingleView

CView

Класс окна просмотра документа

Кроме этих основных классов создается класс CAboutDlg, наследованный от базового класса CDialog, который отвечает за диалоговую панель About.

Если при создании приложения определить возможность работы с базами данных или использование технологии OLE, то список классов приложения может стать шире.

Главный класс приложения

Главный класс приложения CSingleApp наследуется от базового класса CWinApp, а его определение и реализация находятся в файлах single.h и single.cpp.

Таблица сообщений класса. В последней строке определения класса CSingleDoc расположена макрокоманда DECLARE_MESSAGE_MAP(). Эта макрокоманда определена в файле afxwin.h, она добавляет к классу несколько элементов.

Так как в классе CSingleApp определена эта макрокоманда, то он может обрабатывать сообщения и имеет таблицу сообщений. Эта таблица расположена в файле single.cpp.

Кроме команды для обработки командного сообщения ID_APP_ABOUT, расположенного в блоке AFX_MSG_MAP, таблица содержит еще 3 макрокоманды, предназначенные для обработки командных сообщений с идентификаторами ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_PRINT_SETUP. Эти команды поступают, когда пользователь выбирает из меню приложения строки с соответствующими идентификаторами. Для обработки этих командных сообщений вызываются методы класса CWinApp.

Главный объект приложения. В приложении создается всего один объект класса CSingleApp. Этот объект определяется как глобальный, поэтому его конструктор получает управление сразу же после запуска приложения:

Конструктор класса. Конструктор класса CSingleApp никаких действий не выполняет и состоит из пустого блока:

Можно в конструкторе класса разместить код для инициализации приложения, однако лучше для этого использовать метод InitInstance.

Метод InitInstance. Этот метод является виртуальным методом класса CWinApp. Когда наследуется главный класс приложения от базового класса CWinApp, этот метод необходимо переопределить.

MFC AppWizard переопределяет метод InitInstance автоматически для приложений с любым пользовательским интерфейсом. Однако реализация этого метода может различаться для приложений с различным типом интерфейса.

После вызова метода Enable3dControls, который позволяет использовать в приложении трехмерные элементы управления, вызывается метод LoadStdProfileSettings. Этот метод загружает файл конфигурации приложения, имеющий расширение .ini. В ini-файле записаны имена нескольких файлов, с которыми работало приложение. Эти имена файлов будут добавлены как отдельные строки в меню File приложения. Кроме того, в ini-файле может храниться и другая информация.

Затем начинается создание шаблона документа. Сначала создается указатель на объект соответствующего класса. Для однооконных приложений это класс CSingleDocTemplate, а для многооконных - CMultiDocTemplate. Новый объект класса создается при помощи оператора new.

Конструктору класса CSingleDocTemplate передается 4 параметра. Первый параметр - nIDResource - определяет идентификатор ресурсов, используемых совместно с типом документов, управляемых шаблоном. К таким ресурсам относятся меню, пиктограмма, строковый ресурс, таблица акселераторов.

Остальные три параметра - pDocClass, pFrameClass, pViewClass - содержат указатели на объекты класса CRuntimeClass, полученные с помощью макрокоманд RUNTIME_CLASS из классов документа CSingleDoc, окна CMainFrame и окна просмотра CSingleView. Таким образом, шаблон документа объединяет всю информацию, относящуюся к данному типу документов.

Созданный шаблон документов заносится в список шаблонов, с которыми работает приложение. Для этого указатель на созданный шаблон документа передается методу AddDocTemplate из класса CWinApp. Указатель на шаблон документов передается через параметр pTemplate. Указатель pTemplate указывает на объекты класса CDocTemplate. Однако через него можно передавать указатели на объекты класса CSingleDocTemplate, так как класс CDocTemplate является базовым классом для CSingleDocTemplate.

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

После добавления шаблона документа обрабатывается командная строка приложения. Для этого создается объект cmdInfo класса CCommandLineInfo. Этот объект передается методу ParseCommandLine класса CWinApp. Он заполняет объект cmdInfo данными, взятыми из командной строки приложения.

Подготовленный объект передается методу ProccessShellCommand класса CWinApp для обработки. После успешной обработки командной строки этот метод возвращает ненулевое значение.

После успешной инициализации приложения и обработки командной строки метод InitInstance возвращает TRUE. Начинается обработка цикла сообщений.

Метод OnAppAbout. Кроме конструктора и метода IninInstance в главном классе приложения CSingleApp определен метод OnAppAbout. Он расположен в блоке AFX_MSG. Поэтому для работы с этим методом можно использовать ClassWizard.

Этот метод вызывается для обработки командного сообщения ID_APP_ABOUT. Это сообщение поступает в очередь приложения, когда пользователь выбирает из меню Help строку About. Он создает объект класса CAboutDlg, представляющий модальную диалоговую панель, и отображает ее на экране. Описание класса CAboutDlg, а также определение его методов содержится в файле single.cpp.

Класс документа

Этот класс является классом документа приложения. В качестве базового класса для него используется класс CDocument библиотеки MFC.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее