- •Содержание
- •Введение
- •Лабораторная работа №1 разработка программы на базе каркаса приложений
- •Лабораторная работа №2 создание остова приложения
- •Лабораторная работа №3 создание приложения с диалоговым интерфейсом.
- •Лабораторная работа №4 создание приложений с одно-документным интерфейсом
- •Лабораторная работа № 5 создание приложения с многодокументным интерфейсом.
- •Лабораторная работа № 6 создание приложений для построения графических изображений
- •Лабораторная работа № 7 создание приложений баз данных
- •Лабораторная работа № 8 создание приложений для работы с файлами.
- •Лабораторная работа № 9 создание справочной системы для приложения под windows
- •Лабораторная работа № 10 создание многопоточных приложений.
- •Список литературы.
Лабораторная работа №1 разработка программы на базе каркаса приложений
Цель работы - ознакомление с основными компонентами Visual C++ и набором инструментов, интегрированной среды программирования – Developer Studio (студии разработчика), а также приобретение навыков их использования при создании простейшего приложения для Windows.
Visual C++ объединяет в себе две законченные системы разработки Windows-приложений:
программирование на C с использованием функций Win32 API и инструментальных средств студии разработчика: текстового процессора, графического редактора и др.;
программирование на C++ с использованием каркаса приложений, обеспечиваемого библиотекой классов MFC, которая является важнейшей компонентой Visual C++.
Компилятор Visual C++ способен обрабатывать исходный код и на С, и на С++, при этом расширение с указывает на С код, а срр или схх - на С++. В компилятор включена новая библиотека для С++ - Standard Template Library (STL).
Компилятор ресурсов считывает текстовый файл описания ресурсов *.RC, созданный графическим редактором, и переводит его в двоичный файл *.RES для компоновщика.
Компоновщик считывает файлы *.OBJ и *.RES, сгенерированные компилятором С/C++ и компилятором ресурсов, а также обращается за MFC-кодом, хранящемся в файлах *.LIB, за кодом библиотек периода выполнения и за кодом Windows. После этого он формирует исполняемый код в виде файла *.EXE или файла *.DLL. Необходимые библиотеки компоновщик находит по информации в директивах #pragma, включенных в заголовочные файлы библиотеки MFC.
Мастер приложений AppWizard, работая в диалоге с разработчиком, генерирует исходный код приложения, включает в него необходимые компоненты, классы и исходные файлы.
Мастер классов ClassWizard предназначен для создания остовов новых производных классов и остовов переопределяемых методов. Он позволяет также показать все сообщения, приходящие к классу, и создать остов обработчика любого из этих сообщений.
Visual C++ имеет встроенную справочную систему InfoView, которая включает более 6000 страниц текста, и предоставляет следующие способы поиска информации, по книге, по теме, по контексту программы или справки и по запросу с использованием логических связок.
Отладчик работает в тесной взаимосвязи со студией разработчика, позволяет расставлять и убирать точки прерывания, а также контролировать пошаговое исполнение программ и отображать в окнах Variables и Watch указатели объектов до полного описания всех элементов данных производного и базовых классов.
Встроенные средства просмотра исходного кода позволяют увидеть дерево всех классов программы вместе с их методами и переменными. Просмотреть список глобальных переменных, найти объявления и описания методов и всех переменных, а также ссылки на эти методы и переменные, выявить для выделенной функции схему вызываемых и вызывающих функций, а для выделенного класса схему производных и базовых классов.
В Visual C++ включен ряд диагностических утилит: Spy++ для просмотра дерева процессов, потоков и окон, открытых в системе, а также получаемых сообщений; PView и PView95 для закрытия сбойных процессов, не видимых из Windows; OLE-утилиты для тестирования элементов ActiveX, просмотра и редактирования двоичных файлов; средства построения профиля исходного кода.
Для реализации крупномасштабных проектов в систему может быть включена специальная программа контроля исходного кода SourceSafe, организующая работу нескольких программистов над одним проектом.
Хранилище компонент Components Gallery обеспечивает использование одних и тех же компонент в нескольких проектах и оперирует с тремя типами модулей: элементами ОСХ, классами и мастерами.
Библиотека MFC является главной компонентой Visual C++, определяет программный интерфейс для Windows на языке С++ и новую технологию разработки программного обеспечения на базе каркаса приложений.
Каркас приложений – это подмножество библиотеки MFC, из которого программист берет классы, служащие строительными блоками приложения на самом верхнем уровне. Он предлагает структуру приложения, отработанную на многих проектах и опробованную во многих программных средах.
Элементами исходного кода для приложения, построенного на базе каркаса MFC, являются следующие классы и методы:
1. Заголовочный файл приложения MyApp.h
1.1. Класс нового приложения
class CMyApp:public CWinApp
{ public:
virtual BOOL InitInstance();
};
1.2. Класс рамки окна
class CMyFrame:public CFrameWnd
{ public:
CMyFrame();
protected:
afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};//-спецификатор afx_msg означает, что функция является частью системы распределения сообщений библиотеки MFC;
2. Файл реализации приложения MyApp.срр
#include <afxwin.h> //-заголовочный файл базовых классов MFC;
#include "MyApp.h" //-собственный заголовочный файл;
CMyApp theApp; //-уникальный в программе объект приложения;
2.1. Реализация метода инициализации объекта приложения
CMyApp::InitInstance()
{ m_pMainWnd = new CMyFrame();
m_pMainWnd -> ShowWindow(m_nCmdShow);
m_pMainWnd -> UpdateWindow();
return TRUE;
}
2.2. Вызов макросов карты сообщений
BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()
2.3. Реализация конструктора CMyFrame
CMyFrame::CMyFrame()
{
Create(NULL,"MYAPP Application");
}
2.4. Обработчик сообщения о щелчке левой кнопки мыши
void CMyFrame:: OnLButtonDown(UINT nFlags,CPoint point)
{
TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
(long)nFlags,point.x,point.y);
}
2.5. Обработчик сообщения WM_PAINT
void CMyFrame::OnPaint()
{
CPaintDC dc(this);
dc.TextOut(0,0," Простое приложение ");
}
Пояснения к программе:
Функция WinMain скрыта внутри каркаса приложения.
Объект класса CMyApp представляет программу. В программе определяется единственный глобальный объект класса СМуАрр - theApp. Базовый класс CWinApp определяет основные характеристики объекта theApp.
При запуске приложения вызывается функция WinMain каркаса, которая использует объект theApp.
В первую очередь функция WinMain вызывает метод theApp. InitInstance, который обеспечивает создание и отображение на экране основного окна – рамки приложения.
Затем вызывается метод СWinApp::Run базового класса, который принимает сообщения, поступающие к приложению, и распределяет между рабочими окнами.
Конструктор CMyFrame вызывает функцию Create базового класса CFrameWnd для создания оконной структуры и связывает ее с оконным указателем того же класса. Функции ShowWindows и UpdateWindows базового класса вызываются для вывода окна на экран.
Обработчик OnLButtonDown увязан с событием от нажатия левой клавиши мыши с помощью карты сообщений, определяемой макросом DECLARE_MESSAGE_MAP() в классе CMyFrame, при этом элементу карты ОN_WM_LBUTTONDOWN() ставиться в соответствие прототип функции afx_msg void OnLButtonDown(UINT nFlags,CPoint point). Обработчик с помощью макроса TRACE выводит сообщение в отладочное окно.
Обработчик OnPaint увязывается той же картой с сообщением о перерисовке окна главной рамки, которое возникает в начале работы программы, при изменении размеров окна и при обновлении всего окна или его части. На экран с координатами (0,0) выдается текст с помощью функции TextOut графического интерфейса GDI библиотеки MFC.
Приложение завершает работу при закрытии его основного окна, что вызывает разрушение объекта класса CMyFrame, выход из рабочего цикла Run, выход из главной функции WinMain и разрушение объекта класса CMyApp.
Создание исполняемого файла *.ЕХЕ или динамически загружаемой библиотеки *.DLL требует построения проекта как системы взаимосвязанных исходных файлов для компилятора программного кода, компилятора ресурсов, компоновщика или редактора связей, а также для построителя справочной системы. Для этих целей часто используют сборочные файлы *.МАК, которые отражают все взаимосвязи между исходными, промежуточными и выходными файлами. Программа Мake program, управляющая сборкой проекта, считывает файл *.МАК, а затем так настраивает компилятор С/С++, ассемблер, компоновщик и компилятор ресурсов, чтобы получить на выходе исполняемый файл *.ЕХЕ или *.DLL.
Студия разработчика при открытии файла *.МАК создает двоичный файл, который дублирует содержание текстового файла, а также сохраняет параметры среды программирования. Этот файл имеет расширение *.MDP.
При использовании мастера приложений AppWizard и мастера классов ClassWizard проект и его файлы, в том числе и новые каталоги, создаются автоматически или после запуска определенных инструментальных средств студии разработчика. Если проект имеет имя Арр, то набор его файлов может быть таким:
а) служебные файлы проекта:
App.dsw - файл рабочей области для объединения сведений о нескольких проектах;
App.opt - файл опций пользователя для рабочей области;
App.dsp - файл проекта;
App.clw - файл с информацией о классах проекта;
App.odl - файл с описанием типов объектов;
App.ncb – файл синтаксического анализа;
Readme.txt - файл с описанием файлов проекта;
б) программные файлы *.h и *.cpp с именами Арр, AppDlg, AppDoc, AppView, AppCtl, AppPpg, AppSet, MainFrm, ChildFrm и др.;
в) предкомпилированные файлы: StdAfx.h, StdAfx.cpp, StdAfx.obj, App.pch;
г) файлы ресурсов проекта:
Арр.rc - файл всех ресурсов проекта;
Resource.h - заголовочный файл для ресурсов;
…Res\App.rc2 - дополнительный файл для ресурсов, используемых в нескольких проектах;
App.def - файл определения модуля;
…Res\App.ico - файл с иконкой проекта;
…Res\oolBar.bmp - файл для кнопок инструментальной панели;
д) справочные файлы для проекта:
MakeHelp.bat - файл для создания справочного файла App.hlp;
App.hpj - проектный файл для компилятора справочного файла;
App.rtf - справочный файл в формате RTF;
App.cnt - файл с содержанием для справочного файла;
е) другие файлы:
App.plg, Vc50.idb, Vc50.pdb, Print.rtf, Bullet.bmp, App.lic, App.red (для OLE), IToolbar.bmp и др.
Задание №1.
Вручную набрать исходный код приложения и создать исполняемый файл МуАрр.ехе, выполнив следующие действия:
Открыть новый файл под именем МуАрр.h с помощью команды File/ New/ File/ C/C++ Header Files.
Набрать для него исходный код и сохранить в рабочем каталоге.
Открыть новый файл под именем МуАрр.срр с помощью команды File/ New/ File/ C++ Source Files.
Набрать для него исходный код и сохранить в том же рабочем каталоге.
Создать новый проект с помощью команды File/ New/ Project/ Win32 Application/ Finish или ОК, задав ему имя МуАрр.
Включить в проект файлы MyApp.h и MyApp.cpp с помощью команды Project/ Add to Project/ Files, отметив их в открывшемся диалоговом окне и нажав кнопку ОК.
Просмотреть в окне проекта включенные файлы, производные классы и ресурсы проекта.
С помощью команды Project/ Settings/ Вкладка General установить тип используемых библиотек Uses MFC in a Shared DLL.
Создать исполняемый файл проекта с помощью команды Build/ Build MyApp.exe.
Запустить полученное приложение на работу командой Build/ Execute MyApp.exe и проверить его функциональное поведение.
Объяснить, почему не обрабатывается сообщение при нажатии левой клавиши мыши.
Задание №2.
Исполнить полученный исполняемый файл в отладочном режиме, выполнив следующие действия:
Запустить программу в отладочном режиме Build/ Start Debug/ Go.
Проанализировать содержимое окна вывода.
На окне приложения щелкнуть левой клавишей мыши и найти выдаваемое при этом приложением сообщение в окне вывода Output.
Перемещая курсор по окну приложения, щелкать левой клавишей мыши и наблюдать выдачу очередных сообщений в окне вывода.
Включить в исходный текст МуАрр.срр несколько точек прерывания и исполнить команду Build/ Debug/ Go.
Убедиться, что элемент меню Build заменен пунктом Debug.
Используя клавишу F10 или элемент меню Debug/ Step Over, выполнить пошаговую отладку приложения.
Исполнить команду Debug/ Stop Debugging и убедиться, что элемент Debug заменен пунктом Build.
Включив достаточное число точек прерывания, произвести пошаговую отладку для проверки выполнения всех функций приложения.
Задание №3.
Дополнить исходный код приложения обработчиком сообщения о нажатии правой клавиши мыши, скомпилировать проект и убедиться в правильности функционирования программы.
Задание №4.
Ознакомиться с командами главного меню, панели инструментов и окнами студии разработчика Visual C++, уяснив при этом следующие свойства и возможности:
Изменение элементов главного меню в процессе работы над проектом приложения.
Наличие следующих окон документов:
окно проекта Project Workspace для просмотра классов проекта, его ресурсов и файлов;
окно вывода Output, в которое направляются сообщения от инструментальных средств: компилятора, отладчика и др.;
окно просмотра информации Info Viewer Topic при работе с электронной документацией;
окна, используемые при отладке: Watch, Variables, Register, Memory, Call Stack и Disassembly.
Два состояния многих окон: плавающее состояние, когда они легко переносятся в любое место окна студии разработчика; стыковочное состояние, когда окно присоединяется к какой-либо стороне окна студии.
Наличие устанавливаемых и удаляемых пользователем панелей инструментов: Standard, Project, Resource, Edit, Debug, Browse, InfoViewer, InfoViewer Contents, File, Insert, Build, Tools, Layout, Windows, Help и др.
Задание №5.
Найти в каталогах программу на Си под Windows и создайте исполняемый файл в среде Visual C++.
Контрольные вопросы:
Перечислите все компоненты Visual C++ и выясните, какие из них установлены в студии разработчика данного компьютера.
Охарактеризуйте две системы программирования, поддерживаемые Visual C++.
Назовите основные классы и методы приложения, построенного на базе каркаса приложений.
Опишите работу такого приложения.
Напишите строки исходного кода для обработки сообщения ОN_WM_LBUTTONDOWN.
Найдите описание указателя m_pMainWnd.
Перечислите основные методы класса CWinApp и укажите, какие из них являются виртуальными.
Перечислите основные методы класса CFrameWnd и укажите, какие из них являются виртуальными.
Найдите в исходных кодах Visual C++ определения макросов DECLARE_MESSAGE_MAP(), BEGIN_MESSAGE_MAP(…,…), END_MESSAGE_MAP().
Объясните, почему в библиотеке MFC обработчики сообщений о событиях не являются виртуальными, вспомнив, что число производных от CWin классов около 20, что число обрабатываемых сообщений в Windows более 140 и что в таблице диспетчеризации виртуальных функций требуется включать на каждую такую функцию 4 байта.
Объясните назначение карты сообщений MessageMap.
Объясните как имя сообщения Windows, например WM_LBUTTONDOWN, связано с именем соответствующего элемента в карте сообщений и с именем функции-обработчика этого сообщения.
Какие 4 фрагмента кода надо написать и куда их включить для создания собственного обработчика сообщения нового класса–потомка CWnd?
Назовите 3 способа включения трассировки программы.
Назовите 2 способа изменения состояния окон из стыковочного в плавающее и обратно.
