Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

учебное пособие. Часть1. Информатика

.pdf
Скачиваний:
43
Добавлен:
04.06.2015
Размер:
2.87 Mб
Скачать

{

Visible = true;

circle ( X, Y, Radius );

}

void Circle::Hide ()

{

if ( !Visible ) return; // Не надо прятать

unsigned int TempColor; // Сохранить текущий цвет TempColor = getcolor ();

Setcolor (getbkcolor ());// Установить текущим цвет фона Visible = false;

circle ( X, Y, Radius ); // Нарисовать цветом фона setcolor ( TempColor ); // Восстановить текущий цвет

};

void Circle::Expand ( int ExpandBy )

{

Boolean vis = Visible; if (vis) Hide ();

Radius += ExpandBy; // Увеличить радиус

if ( Radius < 0 )

 

Radius = 0;

 

if (vis) Show ();

// Показать окружность

};

 

inline void Circle::Contract ( int ContractBy )

{

Expand ( -ContractBy ); };

int main ()

{

Circle MyCircle (50, 100, 25); // Описываем объект MyCircle.Show ();

MyCircle.MoveTo ( 100, 125 ); MyCircle.Expand (25); MyCircle.Contract (35);

return 0;

}

Данное пособие только знакомит с объектно-ориентированным про- граммированием. Более подробно эти вопросы рассматриваются в специаль- ном курсе.

301

13. ПРОГРАММИРОВАНИЕ В СРЕДЕ VISUAL

Среда программирования Visual C++ (в дальнейшем VC) применя- ется для создания профессиональных приложений. В данной главе позна-

комимся со средой VC и методикой построения некоторых приложений.

Программирование имеет следующие преимущества [27]:

Стандартный интерфейс пользователя, т. е. он один и тот же для различных приложений: всем из- вестно, как запустить приложение или как использовать значки в правом верхнем углу окна (минимизиро- вать, максимизировать, закрыть и т. д.). Это упрощает освоение компьютера пользователем. Для програм- мистов же этот эффект более весом, так как Windows предлагает обширную библиотеку общих встроен- ных подпрограмм пользовательского интерфейса.

Общесистемный ввод, использующий очередь, и система передачи сообщений. Если в DOS необ- ходимо осуществить ввод при помощи мыши или клавиатуры, то часто прибегают к методу, известному как polling (опрос), что обычно реализуют в виде бесконечного цикла, непрерывно контролирующего мышь или клавиатуру. Windows принимает на себя исключительные права по управлению всеми аппаратными устройствами. Windows непосредственно получает каждое событие, которое генерируется мышью, клавиа- турой, таймерами и т. д. и записывает их. Эти записи затем передаются приложениям, которые в них нуж- даются, а они, в свою очередь, реагируют соответствующим образом.

Архитектура ввода-вывода, не зависимая от внешних устройств (не надо учитывать специфику внешних устройств).

Многозадачность на уровне приложений и взаимодействие между процессами (взаимодействие через Clipboard или технологию, известную под названием OLE).

Cреда VC включает следующие основные компоненты [27]:

Редактор, используемый для ввода, просмотра и проверки исходного кода С++.

Компилятор, выполняющий трансляцию исходного кода С++ в объектный код.

Компоновщик, создающий выполняемые файлы за счет объединения объектного кода и библио- течных модулей.

Библиотеки, поддерживающие предварительно написанные модули, которые можно применять в

пользовательских программах.

Другие инструментальные средства, включая AppWizard (мастер приложений), ClassWizard (мастер классов) и Resource Editor (редактор ресурсов).

13.1. Методы программирования в среде WINDOWS

Во многих операционных системах взаимодействие с системой инициирует программа пользовате- ля. Например, в DOS она выполняет запросы к системе при необходимости осуществить ввод/вывод данных. Таким образом, программы, написанные в традиционном стиле, сами обращаются к операционной системе. VC можно использовать для создания при- ложений Windows, которые организованы почти таким же способом, как приложения DOS. Такие прило- жения называются консольными приложениями.

Однако консольные приложения не похожи на приложения Windows. Чтобы программы работали подобно другим приложениям Windows, надо создавать приложения, управляемые событиями. Фундамен- тальная структура программы, управляемой событиями, очень сильно отличается от структуры программы процедурного программирования.

Традиционная программа на языке С++ организована иерархическим образом: есть главная функ- ция, которая предоставляет работу другим функциям, а те, в свою очередь, функциям более низшего уровня.

Программа Windows также содержит функции, но они организованы таким образом, чтобы генери- ровать отклик в ответ на внешние события.

В Windows существует множество различных типов событий. Всякий раз, когда происходит собы- тие, Windows создает сообщение и помещает его во входную очередь соответствующего приложения. На- пример, каждый раз при щелчке мыши в пределах окна программы будет направлено сообщение о нажатии кнопки мыши. Сообщение другого типа посылается программе, когда принадлежащее ей окно должно быть перерисовано. Сообщения иного типа приходят, если нажата клавиша на клавиатуре в то время, когда окно имеет фокус ввода (т. е. ввод с клавиатуры направляется активному окну). Когда программа начинает рабо-

302

тать, сообщения к ней приходят неупорядоченным образом, никогда не известно, какое сообщение будет следующим. Таким образом, программы для Windows напоминают программы, работающие по прерыва- ниям.

В Windows существует множество сообщений. Каждое из них представляется уникальным 32- разрядным целым числом. В файле windows.h определены стандартные макроимена для всех возможных сообщений. И в общем случае для идентификации сообщений используются всегда макроимена, а не число- вые значения. Например:

WM_CHAR

WM_PAINT

WM_MOVE WM_LBUTTONUP WM_LBUTTONDOWN

1.1.13.2. Сеанс работы в VISUAL C++ в консольном режиме

1. Для запуска VC++ необходимо выбрать в меню «Пуск» пункт «Программы», затем во всплы-

вающем меню выбираем “Microsoft Visual Studio 6.0”, а потом еще раз “Microsoft Visual C++ 6.0”. При запуске на короткое время появляется красочная заставка, а затем главное окно програм- мы, которое называется Microsoft Developer Studio (студия разработчика). Главное окно (рис. 37) включает три окна:

Окно Projеct Workspace (рабочая область проекта) появляется с левого края экрана. Это ок- но предназначено для управления всеми аспектами вашего проекта. Нижняя часть окна Project Workspace может содержать четыре закладки: ClassView, ResourceView, FileView и InfoView.

Страница FileVeiw позволяет просматривать и редактировать все файлы вашего проекта. Страница СlassView позволяет просматривать и редактировать классы проекта. Страница ResourceView позволя- ет просматривать и редактировать при визуальном проектировании ресурсы проекта (например, диалоговые панели, меню, значки, изображения в формате BMP). Страница InfoViеw позволяет обратиться к докумен- тации (к справочным данным).

Окно Editor (редактор) появляется справа от окна Project Workspace. Оно используется для ввода и проверки исходного кода.

Окно Output (вывод) появляется в нижней части экрана. В этом окне отображаются сообщения

оходе выполнения, о возникающих ошибках при компиляции.

303

Рис. 37. Главное окно программы “Microsoft Visual C++ 6.0”

2.В главном меню выбираем в пункте File пункт New.

3.В появившейся диалоговой панели New выбираем закладку Projects. На открывающейся па- нели диалога предлагается обширный выбор проектов. Выбираем проект Win32 Console Application. На этой же панели в окне редактирования Project name предлагается ввести имя проек- та (например, вводим Proba). Это имя автоматически добавляется в конец текстового поля Location (размещение), находящегося под полем Project name. Имя проекта играет важную роль: оно является именем выполняемой программы, полученной после сборки проекта; оно используется как имя подкаталога (называемого рабочей областью (workspace) это место, где автоматически будут создаваться файлы проекта); оно будет использоваться для образования имен классов в некоторых приложениях. По умолча- нию при создании нового проекта создается новая рабочая область. При необходимости местоположение

проекта можно изменить, используя поле Location. В завершении щелкните на кнопке ОК панели диалога

New.

4. В появившейся диалоговой панели Win32 Console Application действия выполняются по шагам. Для консольного приложения это всего один шаг. Step1 здесь предлагается выбрать тип прило- жения:

An empty project (пустой проект, т. е. пока в нем нет файлов);

A simple application (простое приложение) – это приложение, содержащее файл с главной функцией, которую можно дополнять;

A Hello World application (приложение с приветствием) – это приложение, содержащее файл с главной функцией, которая выводит приветствие и которую можно дополнять;

An application that supports (приложение, поддерживающее MFC – библиотеку фун- даментальных классов).

304

Выберите радиокнопку с надписью "An empty project". В завершении сделайте щелчок мы-

шью на кнопке Finish. Появляется диалоговая панель New Project Information, в которой пред- ставлена информация о проекте. Сделайте щелчок мышью на кнопке ОК.

5.Теперь необходимо создать файл с текстом программы на языке С++. Еще раз подчеркнем, что программа имеет такую же структуру, что и под DOS. В главном меню выбираем в пункте File пункт New.

6.В появившейся диалоговой панели New выбираем закладку Files. На открывающейся панели диа- лога предлагается обширный выбор типов файлов. Выбираем С++ Source File. В окно редактирования File name необходимо ввести имя файла, например Proba. Сделайте щелчок мышью на кнопке ОК.

7.Теперь в окне Editor набираем текст программы и сохраняем его.

8.Программу можно запустить, выбрав в меню Build пункт Build Proba .exe. После успешного по- строения проекта выполняем его, выбрав в меню Build пункт Execute Proba.exe. Эта программа выводит приветствие.

9.После создания проекта остается много временных файлов. Все они хранятся в папке Debug, если они не нужны, то папку следует удалить.

13.3.Открытие ранее созданного проекта

1.Запустить VC.

2.Выбрать в главном меню пункт File/Open workspace.

3.В открывшемся диалоговом окне выбрать папку с нужным проектом, а в папке найти файл с име-

нем проекта и расширением dsw.

2.13.4. Отладка программ

1.Выставить точку прерывания перед оператором (а не перед описанием) с помощью клавиши F9. Удаляется точка прерывания точно так же, как устанавливается.

2.Выбрать в главном меню пункт Build/Start Debug/Go. Таким образом запускается отладчик (при этом в главном меню появляется новый пункт Debug) и выполняется программа до точки прерывания. Появляются два отладочных окна: слева окно Auto, в котором автоматически отслеживаются значения пе- ременных, а в правое окно Watch можно вносить идентификаторы переменных, за которыми ведется на- блюдение.

3.Далее выполнить по шагам:

F10 без входа в вызываемые функции;

F11 – с прохождением вызываемой функции.

4. Завершить работу с отладчиком выбором пункта Debug/Stop Debugging.

Значение любой переменной можно определить, если в отладочном режиме задержать мышку на идентификаторе этой переменной.

13.6. Приложения Windows c MFC

Этот раздел посвящен созданию приложений Windows, основанных на Microsoft Foundation

Classes (MFC библиотека основных классов). Использование MFC значительно облегчает программи- рование под Windows благодаря использованию заранее написанного и готового к работе кода. Также ис- пользуются различные вспомогательные инструменты, такие как АррWizard и ClassWizard.

Наиболее сильной особенностью Visual C++ является «мастер», на- зываемый AppWizard. AppWizard это генератор объектного кода. Он пишет за программиста исходный код. В промышленности часто говорят о программах этого типа как о программах CASE (автоматизированная разра-

ботка программного обеспечения).

305

При наличии всей необходимой информации AppWizard генерирует каркас пользовательского приложения. Этот каркас программы содержит указанные программистом свойства, и его можно продолжать настраивать с целью предоставления ему специфических возможностей. Но следует учиты- вать, что этот «мастер» используется только в начале работы над проектом, его нельзя применить в процессе поддержки или усовершенствования про- граммы. На более поздних этапах создания программы мы будем пользовать- ся другим «мастером» – ClassWizard.

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

M F C

C O bject

C C m dTarget

C W inA pp

 

C W nd

 

 

 

C Y ourA pp

 

C YourW indow

 

 

 

Ваш е прилож ение

Рис. 38.

Каждая программа на MFC должна включать объект приложения, кото- рый отвечает за запуск и останов приложения. Приложение создает другой необходимый объект главное окно программы. После того как главное окно создано и отображено, оба объекта продолжают работать вместе. Объект приложение выполняет доставку сообщений, восстанавливая сообщения из

306

Windows. Объект окна отвечает на сообщения или передает их другим час- тям приложения. В программах MFC можно реализовать эти два необходи- мых элемента в виде подклассов классов CWinApp и CWnd. Иерархия клас- сов представлена на рис. 38.

CObject корневой класс для всех объектов MFC. Каждый объект MFC является потомком Сobject. Сobject не имеет какого-либо ро- дительского класса.

CcmdTarget базовый класс для объектов, получающих сообщения и отвечающих на них. Он поддерживает элементы данных и методы, кото- рыми должны обладать объекты подобного типа.

13.7.Сеанс работы в VISUAL C++ c использованием MFC

Сеанс работы в Visual C++ c использованием MFC состоит из двух эта-

пов:

1)этапа визуального проектирования;

2)этапа написания кода.

На этапе визуального проектирования разрабатывается внешний вид программы. Для этого используются инструментальные средства Visual C++: командные кнопки, радиокнопки, линейки прокрутки и т. д., которые разме- щаются в диалоговых окнах программы [30].

На этапе написания кода используется текстовый редактор Visual C++ и язык программирования С++.

Прежде чем писать код программы, нужно определить, как будет вы- глядеть программа после запуска. Вид программы показан на рис. 39. Про- грамма содержит две кнопки: Say Hello и Exit. При щелчке на кнопке Say Hello, выдается панель сообщения (рис. 40). Если щелкаете на кнопке Exit, то приложение закрывается.

Рассмотрим подробно порядок создания проекта:

1. Запускаем VC. После запуска появляется главное окно программы, которое мы обсудили выше. Оно называется Microsoft Developer Studio (студия разработчика).

2. Выбираем в меню File пункт New.

307

Рис. 39.

Рис. 40.

3. В появившейся диалоговой панели New выбираем страницу Projects. На этой странице пред- лагается обширный выбор проектов. Мы выбираем пункт MFC AppWizard(exe). На этой же панели в окне редактирования Project name предлагается ввести имя вашего проекта (Hello). После ввода имени проекта оно добавляется в конец текстового поля Location (размещение), находящегося под полем Project name. Имя проекта играет очень важную роль: оно является именем вашей выполняемой про- граммы, полученной после сборки проекта; оно используется как имя подкаталога (называемого рабочей областью (workspace) это место, где автоматически будут создаваться файлы проекта); оно будет ис- пользоваться для образования имен классов приложения. По умолчанию при создании нового проекта соз- дается новая рабочая область. При необходимости местоположение проекта можно изменить, используя

поле Location. В завершении щелкните на кнопке ОК панели New.

4. В появившейся диалоговой панели MFC AppWizard действия выполняем по шагам. Step1 предлагается выбрать тип приложения:

308

Single Document Interface (SDI, или однодокументный интерфейс) позволяет открыть только один документ в каждый момент времени. Приложение Windows Notepad является приложением

SDI;

Multiple Document Interface (MDI, многодокументный интерфейс) – позволяет одно- временно открывать несколько документов. Приложение Windows Excel, Word это приложения

MDI;

Dialog Based (основанный на диалоге) – это приложение использует диалоговое окно в каче- стве главного. Такие приложения используются для программ-утилит.

Выбираем радиокнопку с надписью Dialog Based. Все остальное на этой панели оставляем по умолчанию. В завершении щелкните на кнопке Next. На шаге Step2 можно изменить заголовок диало-

говой панели, а все остальное оставить по умолчанию. В завершении щелкните на кнопке Next.

Step3 здесь все оставляем по умолчанию и щелкаем на кнопке Next. Step4 на этом шаге сообщается о том, какие классы и файлы созданы MFC AppWizard. Щелкните на кнопке Finish.

5.Открываем диалоговую панель New Project Information, в которой представляются все спецификации проекта, которые вы задали на предыдущих этапах. Щелкните на кнопке ОК. В ответ будут созданы каркасные файлы программы.

6.В появившемся окне VC запускаем свою программу на выполнение, выбрав в меню Build пункт Build Hello.exe. Выведется главное окно программы, в котором будут кнопки OK и Сancel и инфор- мационное поле. Закройте это окно.

7.Теперь создаем визуальную часть программы. В рабочей области проекта Project Workspace

щелкаете на закладке Resource View. При выполнении двойного щелчка на пункте Hello Resource, выводится список ресурсов.

8.Выполняем двойной щелчок на пункте Dialog.

9.Выполняем двойной щелчок на пункте IDD_HELLO_DIALOG. Появляется диалоговая панель ва- шего окна, доступная для редактирования. Сначала удалите кнопки OK и Сancel и информационное поле, выбрав нужную кнопку мышкой, нажмите клавишу Delete.

10.Теперь размещаем две кнопки на своей панели. Для этого используется панель инструментов Controls с элементами управления. На панели инструментов щелкните на кнопке Button, а потом на том месте диалоговой панели, где собираетесь поместить командную кнопку. В ответ VC поместит кнопку в мес- те щелчка.

11.Изменяем надпись на кнопке. Выполните правый щелчок на кнопке Button1. В всплывающем меню выберите properties (свойства). В появившейся панели в окне редактирования Caption измените

запись на Say Hello. В окне редактирования ID измените запись на IDC_SAYHELLO_BUTTON. Закройте окно.

12.Аналогичные действия выполняем для второй кнопки.

13.Сохраняем результаты работы, выбрав в меню File пункт Save All.

14.Запускаем проект, выбрав в меню Build пункт Build Hello.exe. Потом закрываем окно.

15.Приступаем к написанию кода. В меню View выбираем пункт ClassWizard. Появляется диа-

логовая панель. Выбираем страницу Message Maps. Проверяем в списке Class Name, установлен ли класс ChelloDlg, связанный с диалоговой панелью. Выбираем в диалоговой панели идентификатор

IDC_SAYHELLO_BUTTON, а в списке сообщений Messages из двух возможных событий BN_CLICKED и BN_DOUBLECLICKED BN_CLICKED. Оно происходит, когда пользователь щелкнул на кнопке.

16. Щелкаем на кнопке Add Function (добавить функцию). Появляется панель, в которой пред- лагается имя функции, с которым можно согласиться.

17. Щелкаем на кнопке Edit Code (редактировать код). В ответ откроется файл HelloDlg.cpp с функцией Onsayhellobutton, которую можно редактировать. После комментария вставляем свой код:

MessageBox("Hello, friend!", "Hello", MB_ICONINFORMATION);

309

Сохраните результаты своей работы и запустите программу.

18. Аналогично свяжем код с кнопкой Exit. Код будет следующий: OnOK(); Сохраните результа- ты своей работы и запустите программу.

После создания проекта остается много временных файлов в папке Debug, их можно удалить.

Функция MessageBox()может иметь один или три параметра. В первом случае этим параметром является выводимая строка. Во втором случае это выводимая строка, название окна и иконка окна. Третий параметр может принимать значения следующих констант:

MB_ICONINFORMATION MB_ICONSTOP

Вернемся к проекту Hello. Этот проект использует класс CHelloApp, унаследованный от CWinApp. CWinApp предоставляет сред- ства инициализации и управления приложением. Любое приложение может содержать только один объект класса CWinApp. Класс CWinApp инкапсули- рует выполнение функции WinMain и цикл обработки сообщений (каждому сообщению соответствует метод член класса) [27]. Объект окна использует класс CHelloDlg, унаследованный от CDialog как главное окно. CDialog

подкласс класса CWnd. Класс CWnd является базовым классом для всех оконных объектов библиотеки MFC. Он инкапсулирует управление Windows-окнами (скрывая от разработчика непосредственно структуру HWND) и предоставляя доступ к управлению оконными объектами посредст- вом API функций, являясь классом оболочкой для Windows-окон. Класс CWnd в соединении с механизмом обработки сообщений прячет от разработ- чика функцию окна WndProc. Все поступающие от окна сообщения переда- ются через таблицу сообщений и автоматически инициализируют вызов со- ответствующего метода OnMessage класса CWnd. Следовательно, для того чтобы определить в производном классе собственную обработку любого со- общения, достаточно переопределить соответствующий метод OnMessage класса CWnd. Хотя сообщения Windows идентифицируются одиночным це- лым числом, фактическое сообщение, используемое для связи, – это структу- ра, именуемая MSG, о которой говорилось выше.

Компоненты или элементы управления являются специализированными, отдельными оконными объектами, которые формируют часть пользователь- ского интерфейса, т. е. помогают управлять программой. Элементы управле- ния не существуют сами по себе, они должны содержаться внутри другого окна (родительского). Элементы управления называют элементами управле- ния дочернего окна. MFC содержит шесть встроенных семейств элементов управления дочернего окна:

CStatic элементы управления, отображающие текст или пикто- граммы, наподобие элементов управления, изображенных на панели Control Toolbar.

CButton кнопки, флажки, переключатели и групповые рамки.

CListBox элементы управления, которые отображают прокручи- ваемый список пунктов.

310