В иностранных источниках визуальные языки прогр делят на три категории:
1)Для обработки визуальной информации;
2)Для поддержки визуального взаимодействия с пользователем;
3)Для программирования с помощью визуальных выражений.
В.6 Оконное приложение можно создать при помощи мастера приложений, которое имеет однодокументный, многодокументный или диалоговый интерфейс.
1)Однодокументное приложение может предоставлять пользователю в любой момент времени работать только с одним файлом.
2)Многодокументное приложение может одновременно представлять несколько документов, каждый в собственном окне.
3)Пользовательский интерфейс представляет собой единственное диалоговое окно.
Консольное приложение - это программа, которая выполняется из командной cтроки окна DOS или Windows и не имеет графического интерфейса (окон). Проект консольного приложения создается пустым, предполагая добавление файлов исходного текста в него вручную.
Сервисные приложения – особый вид консольных приложений. Организуют специальную функцию, которая может обрабатывать команды, посылаемые приложением.
Драйверы – приложения, создающие интерфейс к устройствам. Многие драйверы являются сервисными процессами. Могут быть сервисами в сочетании с DLL-библиотеками.
В.7 Ресурсы могут состоять из самых различных элементов, включая элементы интерфейса, предоставляющие данные пользователю (растровое изображение, значок или курсор), настраиваемые ресурсы, ресурсы версии, используемые API-интерфейсами настройки, а также ресурсы меню и диалоговых окон.
Можно добавлять новые ресурсы к проекту и изменять эти ресурсы с помощью соответствующего редактора ресурсов. Большинство мастеров Visual C++ автоматически создают RC-файл для проекта.
Стандартные ресурсы: 1)Диалоговые окна (Dialog). 2)Значки (Icons). 3)Определения меню (Menu). 4)Определения панелей инструментов (Toolbar). 5)Растровые изображения (Bitmap). 6)Курсоры мыши (Cursor). 7)Акселераторы
Кроме стандартных, программист может сам определить свои собственные ресурсы.
Ресурсы можно создавать двумя способами:
1)Описать ресурсы программы в текстовом ASCII файле с расширением RC (этот способ практически не используется).
2)Создать ресурс при помощи редактора ресурсов в режиме WYSIWYG (What You See Is What You Get – “что видишь, то и получаешь”).
В.8 Редактирование документа
Для работы с документом в классе документа обычно определяют элементы (простые переменные, переменные структурного типа, объекты различных классов и др.), отвечающие за хранение данных документа, считывание и запись в файл.
Если в процессе работы с документом выделяется дополнительная память для хранения информации, то в деструкторе класса документа необходимо освободить всю дополнительную память, полученную в процессе работы.
Синхронизация окон просмотра документа
Как правило, многооконные приложения позволяют открыть для одного документа несколько окон просмотра. Чтобы открыть дополнительное окно для просмотра уже открытого документа, нужно выбрать из меню Window строку New Window.
Заголовки окон просмотра одного документа будут одинаковыми за исключением того, что каждое такое окно имеет дополнительный числовой идентификатор, означающий номер окна.
В.9 Практически все приложения имеют пользовательский интерфейс, построенный на основе окон. Это может быть диалоговая панель, одно окно или несколько окон, связанных вместе. Основные свойства окон представлены классом CWnd, наследованным от класса CCmdTarget.
Обрамляющие окна (класс CFrameWnd). От этого класса также наследуются классы и CMDIFrameWnd, используемые для отображения окон многооконного интерфейса MDI.
Окна органов управления. Для работы с органами управления (кнопки, полосы прокрутки, редакторы текста) в библиотеке MFC предусмотрены специальные классы, наследованные непосредственно от класса CWnd.
1)CButton - кнопка. 2)CComboBox - список с окном редактирования. 3)CEdit - поле редактирования. 4)CHeaderCtrl - заголовок для таблицы. 5)CListBox - список. 6)CListCtrl - может использоваться для отображения списка пиктограмм. 7)CRichEditControl - окно редактирования, в котором можно редактировать форматированный текст. 8)CScrollBar - полоса просмотра. 9)CToolBarCtrl - панель управления.
Управляющие панели (классы CToolBar, CStatusBar). Класс CToolBar предназначен для создания панели управления. Эта панель обычно содержит ряд кнопок, дублирующих действие меню приложения. Класс CStatusBar управляет панелью состояния. Панель состояния отображается в виде полосы в нижней части окна.
Окна просмотра (класс CView и классы, наследованные от него). Именно окно просмотра используется для вывода на экран документа, с которым работает приложение. Через это окно пользователь может изменять документ.
В.10 При создании приложения с однодокументным интерфейсом с использованием средств MFC AppWizard возможно выбрать следующие параметры:
1.возможность печати и предварительного просмотра документа;
2.наличие панели управления (tool bar)
3.наличие панели состояния (status bar);
4.поддержку технологии OLE
5.поддержку баз данных.
6.поддержку сетевых технологий.
После построения проекта single и запуска полученного приложения на экране появляется главное окно приложения. Оно имеет меню, панели управления и состояния.
Приложение с однооконным интерфейсом, созданное средствами MFC AppWizard, имеет гораздо больше ресурсов, чем приложение, использующее в качестве главного окна приложения диалоговую панель. В нем определены не только диалоговые панели и таблица текстовых строк, но и пиктограмма, меню, панель управления и таблица акселераторов.
MFC AppWizard создает для приложения, обладающего однооконным интерфейсом, четыре основных класса. Эти классы представляют основу любого однооконного приложения, созданного MFC AppWizard.
1) Класс приложения (CsingleApp) базовый класс(CwinApp) Главный класс приложения.
2) Класс прилож (CmainFrame)базовый класс (CframeWnd) Класс главного окна прилож.
3) Класс прилож (CsingleDoc) базовый класс (Cdocument) Класс документа приложения.
4) Класс прилож (CsingleView) базовый класс (CView) Класс окна просмотра документа.
В.11 Главный класс приложения 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, этот метод необходимо переопределить.
В.12 Работа приложений ОС Windows основана на обработке сообщений. В Studio это реализуется через Мастер классов (ClassWizard). Когда пользователь работает с устройствами ввода/вывода, например клавиатурой или мышью, драйверы этих устройств создают сообщения, описывающие его действия. Каждое нажатие на клавиши клавиатуры вызывает генерацию ряда сообщений, определяющих, какая клавиша нажата. Перемещение мыши вызывает сообщения, описывающие траекторию перемещения указателя мыши и т. д.
Сообщения сначала попадают в системную очереди, затем передаются приложениям, которым они предназначены, и записываются в очередь приложений. Каждое приложение имеет собственную очередь сообщений.
Приложение в цикле, который называется циклом обработки сообщений, получает сообщения из очереди приложения и направляет их соответствующей функции окна, которая и выполняет обработку сообщения.
Каждое окно приложения имеет собственную функцию окна. В процессе обработки сообщения операционная система вызывает функцию окна и передает ей структуру, описывающую очередное сообщение.
Функция обработки сообщения опознает, какое именно сообщение поступило для обработки и выполняет соответствующие действия. Сообщения распознаются по его коду.
В.13 В MFC включен набор предопределенных функций-обработчиков сообщений, которые можно использовать в программе. Если программа содержит такую функцию, то она будет вызываться всякий раз, когда поступает связанное с ней сообщение.
Для организации обработки сообщений нужно выполнить следующие действия:
1)В карту сообщений программы должна быть включена команда соответствующего сообщения.
2)Прототип функции-обработчика должен быть включен в описание класса, ответственного за обработку данного сообщения.
3)В программу должна быть включена реализация функции-обработчика
Категории сообщений: 1)сообщения Windows; 2)извещения элементов управления; 3)командные сообщения (команды).
В первую категорию входят те сообщения, которые начинаются с префикса WM_, за исключением WM_COMMAND. Все сообщения этой категории предназначены для обработки окнами и представлениями (view) и часто содержат параметры, которые определяют алгоритм обработки того или иного сообщения.
Вторая категория включает извещения от элементов управления и других дочерних окон, направляемые своим "родителям".
Третья категория охватывает все командные сообщения WM_COMMAND от объектов интерфейса пользователя, которые включают меню, кнопки панелей инструментов и командные клавиши (accelerator keys).
Независимо от способа разделения сообщений по тем или иным категориям, они существуют для того, чтобы их обрабатывали, т. е. при получении сообщения некоторая часть программы должна выполнить определенную последовательность действий.
В.14 Панель инструментов (toolbar) — это объект класса CToolBar, а строка состояния (status bar) — объект класса CStatusBar. Оба класса производные от CControlBar, а тот, в свою очередь — от CWnd.
Класс CControlBar поддерживает окна панелей элементов управления, размещаемых в окне-рамке. Окна этих панелей автоматически изменяют свои размеры и положение при масштабировании и перемещении окна-рамки. Каркас приложений создает и удаляет эти объекты и их окна. AppWizard генерирует код панелей элементов управления для производного класса окна-рамки, хранящегося в файлах MainFrm.cpp и MainFrm.h.
В типичном SDI-приложении объект CToolBar находится вверху клиентской области CMainFrame, a объект CStatusBar — внизу. Между ними находится окно представления.
Панель инструментов — строка горизонтально (или вертикально) расположенных графических кнопок, иногда объединенных в группы.
Окно строки состояния не принимает ввод от пользователя и не генерирует командных сообщений. Его задача — просто показывать под управлением программы текст в соответствующих секциях.
Строка состояния поддерживает два типа текстовых секций: строку сообщений и индикаторы.
В.15, 16 Диалоговое окно – окно для получения данных от пользователя.
