Основы создания Windows-приложений в системе Microsoft Visual Studio C++. Процедурный стиль

Программирование в ОС Windows. Базовые понятия оконных приложений и каркасного программирования в системе Microsoft Visual Studio C++. Состав, структура и функционирование типового каркаса оконного приложения. Схема описания, реализации главного окна.

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 27.09.2017
Размер файла 413,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ValidateRect (hWnd, NULL).

1.1. Завершение работы с окном приложения

Работа с окном приложения завершается функцией (при этом посылается сообщение WM_DESTROY)

int__cdecl DestroyWindow (HWND hWnd);.

Если закрытие окна должно привести и к завершению работы с приложением, то можно обработать сообщение WM_DESTROY с помощью функции (при этом посылается сообщение WM_QUIT)

VOID __cdecl PostQuitMessage (int);

Закрытие диалогового окна производится функцией

int__cdecl EndDialog (HWND hWnd, int <КодЗавершения>);.

5. Разработка и использование приложений на базе типового каркаса оконного Приложения (ТКП)

5.1 Общая схема технологии разработки приложений на базе ТКП

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

РАЗРАБОТКА приложения включает следующие этапы.

1. Проектирование.

1.1 Проектирование интерфейсного компонента.

1.2 Проектирование программного компонента.

2. Реализация.

2.1 Реализация интерфейсных компонентов.

2.1.1 Создание файла описания ресурсов.

2.1.2 Кодирование интерфейсных компонентов.

2.1.3 Подключение к приложению файла описания ресурсов.

2.2 Реализация (кодие) прованирограммных компонентов. Инициализация и визуализация интерфейсных компонентов.

5.2 Характеристика этапов разработки приложений на базе ТКП

1. Проектирование. Результат - спецификация компонентов приложения.

1.1 Проектирование интерфейсного компонента. Включает проектирование окна и его элементов. Результат - вид (облик), состав элементов (кнопок, меню, и т.д.), их свойства (атрибуты), события, сообщения, спецификация реакций на сообщения.

Для окна (главного окна) проектируется пользовательское меню, определяются ресурсы окна (кисти, перья, пиктограммы и т.п.).

Для диалогового окна проектируются элементы управления (кнопки, поля редактирования и т.п.).

1.2 Проектирование программного компонента (программного обеспечения). Результат - алгоритмы работы функций-обработчиков по спецификациям реакций на сообщения.

2. Реализация. Результат - исполнимый код приложения.

2.1 Реализация интерфейсных компонентов. Означает описание на соответствующих языках интерфейсных компонентов приложения (графических ресурсов).

2.1.1 Создание файла описания ресурсов.

2.1.2 Кодирование интерфейсных компонентов. Означает описание на соответствующих языках интерфейсных компонентов приложения (графических ресурсов).

Для окна (главного окна) создается стиль окна с названием <ИмяСтиляОкна>. В дальнейшем зарегистрированный стиль окна с названием <ИмяСтиляОкна> может использоваться для создания и визуализации конкретного окна (окон). А после его создания для управления окном в функциях используется его < ДескрипторОкна >. Для создания стиля окна:

кодируются ресурсы, при необходимости - пользовательское меню с идентификатором <ИмяРесурсаМеню>. Ресурсы кодируются с помощью специальных команд описания или визуально в редакторе ресурсов. Фиксируются <ID_идентификаторы> ресурсов, например, исполнимых пунктов меню (кнопок, команд);

определяется имя функции - <ИмяОбработчикаОкна>;

описывается стиль окна с названием <ИмяСтиляОкна>, путем задания значений атрибутов окна в полях структуры данных описания стиля окна типа WNDCLASS, где в том числе указываются <ДескрипторПриложения> (как параметр функции WinMain), <ИмяСтиляОкна>, <ИмяРесурсаМеню>, <ИмяОбработчикаОкна>, <Пиктограмма>, <КистьФона> и т.п.;

стиль окна связывается с его обработчиком путем указания его названия <ИмяОбработчикаОкна> в соответствующем поле структуры данных описания окна WNDCLASS;

стиль окна регистрируется в ОС функцией RegisterClass (tagWNDCLASS *), в которую передается ссылка на заполненную структуру данных описания стиля окна типа WNDCLASS.

Для диалогового окна описываются составляющие его ресурсы с названием <ID_РесурсовДиалоговогоОкна>. В дальнейшем название созданных <ID_Ресу-рсовДиалоговогоОкна> может использоваться для создания и визуализации конкретного окна (окон). А после его создания для управления окном в функциях используется его < ДескрипторОкна >. Для создания ресурсов диалогового окна:

выполняется описание его элементов управления с помощью команд описания или визуально в редакторе ресурсов;

в редакторе ресурсов определяется название диалогового окна <ID_Ресур-совДиалоговогоОкна> и <ID_идентификаторы> его элементов управления (кнопок, списков и т.п.).

2.1.3 Подключение к приложению файла описания ресурсов.

2.2 Реализация (кодирование) программных компонентов. Означает описание на соответствующих языках программных компонентов приложения - функций-обработчиков. В том числе этот этап предполагает выполнение таких действий как инициализация и визуализация интерфейсных компонентов. Означает задание значений дополнительных атрибутов, связывание с функциями-обработчиками и как результат - получение < ДескриптораОкна >, вывод окна на экран.

Для окна (главного окна) связывание с функциями-обработчиками было выполнено при описании стиля окна. Поэтому здесь только уточняются параметры инициализации - <ЗаголовокОкна>, < КоординатаЛевогоВерхнегоУглаОкна >, < ШиринаОкна >, < ВысотаОкна >, стиль окна. Выполняется указанное с помощью функции

HWND <ДескрипторОкна> = CreateWindow (LPSTR <ИмяСтиляОкна>, …).

Окно визуализируется функцией

ShowWindow (<ДескрипторОкна>, <ИзображениеОкнаПриПервомВыводе>).

Для диалогового окна инициализация, включая связывание ресурсов (<ID_РесурсовДиалоговогоОкна>) с приложением hInstance (<ДескрипторПриложения>), родительским окном hWnd (<ДескрипторРодительскогоОкна >) и обработчиком сообщений диалогового окна (<ИмяОбработчикаОкна>), а также визуализация производится одной функцией (аналогом функций CreateWindow и ShowWindow)

DialogBox (<ДескрипторПриложения>, <ДескрипторДиалоговогоОкна>,

<ДескрипторРодительскогоОкна >, <ИмяОбработчикаОкна>);

5.3 Общая схема описания, реализации главного окна ТКП

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

1. Пользователь по своему усмотрению определяет переменную для обозначения стиля, класса окна, на который можно ссылаться при его инициализации

char szWindowClass [] = <ИмяСтиляОкна>;.

2. Атрибуты стиля задаются в структуре данных WNDCLASS для хранения информации о стиле окна. После регистрации стиля окна в ОС <ИмяСтиляОкна> может использоваться для создания конкретных экземпляров окна. В структуре данных WNDCLASS, в частности, задается параметр, доопределяющий класс, стиль окна (например, параметр CS_VREDRAW обеспечивается перерисовку содержимого клиентской области окна при изменении размера окна по вертикали). См. ПРИЛОЖЕНИЕ Г. Значения параметра Style структуры WNDCLASS.

Для этого описывается переменная

WNDCLASS <СтруктураДанныхОкна>

и задаются атрибуты стиля, <СтруктураДанныхОкна>. lpszClassName = (LPCSTR) <ИмяСтиляОкна> и т.д.

3. Окно регистрируется в ОС. Регистрация окна производится функцией RegisterClass, в которую передается структура данных типа WNDCLASS, описывающая стиль окна

RegisterClass (tagWNDCLASS * <СтруктураДанныхОкна>).

4. Экземпляр окна создается функцией

HWND <ДескрипторОкна> = CreateWindow (LPSTR <ИмяСтиляОкна>,

LPSTR <ЗаголовокОкна>,

DWORD <ДополнительныйСтиль2> = WS_OVERLAPPEDWINDOW,

int < КоординатаЛевогоУглаОкнаХ > = CW_USEDEFAULT,

Int < КоординатаЛевогоУглаОкнаУ > = CW_USEDEFAULT,

Int < ШиринаОкна > = CW_USEDEFAULT,

Int < ВысотаОкна > = CW_USEDEFAULT,

HWND <РодительскоеОкно > = (HWND) NULL,

HMENU <Меню> = (HMENU) NULL,

HANDLE <ДескрипторПриложения> = hInstance,

LPSTR <ДопИнформация> = NULL);.

Здесь <ДополнительныйСтиль2> - доопределяет класс, стиль окна (например, параметр WS_OVERLAPPEDWINDOW обеспечивает создание перекрывающегося окна с системным типовым меню, типовыми кнопкам). См. ПРИЛОЖЕНИЕ Д. Значения параметра dwStyle функции CreateWindow.

Теперь <ДескрипторОкна> можно использовать в функциях управления окном.

5. Визуализация окна производится функцией ShowWindow с прототипом

ShowWindow (HWND <ДескрипторОкна>, int <ИзображениеОкнаПриПервомВыводе>)

Здесь параметр <ИзображенияОкнаПриПервомВыводе>, задает способ его вывода. Значение либо берется из соответствующего параметра - int nCmdShow, переданного ОС в функции WinMain, или переустанавливается пользователем по его усмотрению. см. ПРИЛОЖЕНИЕ Е. Значения параметра nCmdShow функции ShowWindow (доопределение состояния окна при начальном запуске)

Общая схема функционирования приложений на базе ТКП иллюстрируется рисунком 17.

5.4 ТКП. Создание в системе Visual Studio

Ниже описана структура Windows-приложения на базе ТКП с типовым минимальным набором графических ресурсов.

Соответственно интерфейс такого приложения базируется на использовании классического окна с клиентской областью (в качестве главного) с пользовательским стилем (зарегистрированным здесь как - myWindowStyle). Это стиль (окно), определяющий (см. ПРИЛОЖЕНИЕ А. Описание полей структуры WNDCLASS):

76

Размещено на http://www.allbest.ru/

50

отсутствие пользовательского меню; - перерисовку содержимого окна при изменении его размеров (параметры CS_HREDRAW, CS_VREDRAW. См. ПРИЛОЖЕНИЕ Г. Значения параметра Style структуры WNDCLASS); - светлый фон (параметр WHITE_BRUSH. См. ПРИЛОЖЕНИЕ В. Встроенные кисти); - курсор типа “стрелка” (параметр IDC_ARROW. См. ПРИЛОЖЕНИЕ Б. Встроенные курсоры). С окном связан обработчик сообщений (здесь c именем WndProc).

При создании окна (в функции CreateWindow) дополнительно указаны:

заголовок ("ТИПОВОЙ КАРКАС Windows-приложения … "); - стиль - перекрывающееся окно с системным меню и системными кнопками (параметр WS_OVERLAPPEDWINDOW). См. ПРИЛОЖЕНИЕ Д. Значения параметра dwStyle функции CreateWindow (доопределение стиля окна).

При визуализации окна в параметрах функции ShowWindow (hWnd, nCmdShow) указан вывод окна в развернутом виде. См. ПРИЛОЖЕНИЕ Е. Значения параметра nCmdShow функции ShowWindow (доопределение состояния окна при начальном запуске). Соответственно окно выглядит как показано ниже.

Рис.18. Интерфейс ТКП

Текст приложения приведен ниже.

#include <windows. h> // описания Windows

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

char szWindowStyle [] = "myWindowStyle";

// ===============================

// ГЛАВНАЯ ФУНКЦИЯ

int WINAPI WinMain (HINSTANCE hInst, // дескриптор приложения

HINSTANCE hPreInst, // всегда NULL

LPSTR lpszCmdLine, // командная строка

int nCmdShow) // окно при первом выводе

{

HWND hWnd; // дескриптор окна

MSG lpMsg; // структура хранения сообщений

WNDCLASS wcApp; // структура описания стиля окна

wcApp. lpszClassName = szWindowStyle; // имя стиля окна

wcApp. hInstance = hInst; // дескриптор приложения

wcApp. lpfnWndProc = WndProc; // указатель на обработчик сообщений

wcApp. hCursor = LoadCursor (NULL, IDC_ARROW); // курсор - “стрелка”

wcApp. hIcon = 0; // без использования пиктограммы

wcApp. lpszMenuName = 0; // дескриптор меню (без меню)

wcApp. hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); // цвет фона

wcApp. style = CS_HREDRAW | CS_VREDRAW; // перерисовывать окно

wcApp. cbClsExtra = 0; // число доп. байт для WNDCLASS

wcApp. cbWndExtra = 0; // общее число доп. байт

if (! RegisterClass (&wcApp)) // регистрация окна

return 0;

hWnd = CreateWindow (szWindowStyle,

"ТИПОВОЙ КАРКАС Windows-приложения … ",

WS_OVERLAPPEDWINDOW, // окно перекрывающееся, меню, кнопки

CW_USEDEFAULT, // координата х - левый верхний угол окна

CW_USEDEFAULT, // координата у - левый верхний угол окна

CW_USEDEFAULT, // ширина окна в единицах устройства

CW_USEDEFAULT, // высота окна в единицах устройства

(HWND) NULL, // указатель на родительское окно

(HMENU) NULL, // зависит от стиля окна (указатель меню)

hInst, // дескриптор приложения

NULL); // адрес дополнительной информации об окне

ShowWindow (hWnd, nCmdShow); // вывод окна

UpdateWindow (hWnd); // перерисовка окна

while (GetMessage (&lpMsg, NULL, 0, 0))

{

TranslateMessage (&lpMsg); // преобразование виртуальных клавиш

DispatchMessage (&lpMsg); // передача сообщения обработчику

}

return (lpMsg. wParam);

}

// ================================

// ФУНКЦИЯ-ОБРАБОТЧИК ГЛАВНОГО ОКНА. (имя выбирает пользователь)

LRESULT CALLBACK WndProc (HWND hWnd, // дескриптор окна

UINT messg, // код сообщения

WPARAM wParam, LPARAM lParam)

{

HDC hdc; // дескриптор контекста устройства

PAINTSTRUCT ps; // структура для клиентской области окна

switch (messg)

{

case WM_PAINT: // перерисовать окно

hdc = BeginPaint (hWnd, &ps);

// -----Начало фрагмента пользователя

// -----Конец фрагмента пользователя

ValidateRect (hWnd,NULL);

EndPaint (hWnd, &ps);

break;

case WM_DESTROY: // послать сообщение о завершении приложения

PostQuitMessage (0);

break;

default:

return (DefWindowProc (hWnd, messg, wParam, lParam));

}

return 0;

}

Аналогичный по функциональности и интерфейсу текст можно получить автоматически, используя мастер построения каркасов системы Visual Studio - Win32 Application (Simple) или Application (Hello). Однако в последнем случае он будет отличаться от приведенного здесь структурированием - составом модулей, функций.

6. Порядок выполнения работы

Все практические действия выполняются в системе Visual Studio.

Изучить теоретический материал об особенностях оконных приложений (§§ 1.1-1.3, 2, 3.1, 3.2).

1. Создать каркас (с именем EX1_empty) Windows-приложения (тип Empty) средствами мастера Win32 Application. Изучить его свойства (привести в ОТЧЕТЕ): - состав интерфейса, предоставляемые возможности; - файловый состав (структуру проекта, дерево папок, состав, назначение файлов и их соподчиненность по включению); - функциональный состав (привести схему иерархии функций приложения, описать назначение и прототипы функций).

Для этого в системе Visual Studio создать новый проект (New Project):

выбрать пункт меню File-New, в появившемся диалоговом окне выбрать вкладку проекты Projects и выбрать пункт Win32 Application, т.е. создание Windows-приложения;

набрать имя проекта (здесь EX1) в строке Project name, установить переключатель типа проекта в An empty project (пустой проект), завершить создание каркаса (в результате будет создан проект с пустыми папками, дерево проекта можно увидеть в окне рабочего пространства - вкладка FileView!) и запустить приложение.

2. Создать проект (с именем EX1_empty) из одного файла с одной, главной функцией, выводящей сообщения с помощью функций типа MessageBox (результаты привести в ОТЧЕТЕ). Для этого доработать каркас - создать файл в папке Source Files проекта приложения:

выбрать пункт меню File-New, в появившемся диалоговом окне выбрать вкладку файлы Files и пункт С++ Source File, т.е. создание файла с текстом на языке С;

набрать имя файла в поле File name и завершить его создание (в результате будет создан пустой файл, содержимое которого можно увидеть на вкладке FileView);

включить в созданный файл заголовок #include <windows. h>, создать пустую функцию WinMain, например, как показано ниже и выполнить приложение

int WINAPI WinMain (HINSTANCE H1, HINSTANCE H2, LPSTR Str, int I)

{

return 0;

};

включить в приложение вывод окна сообщения (при необходимости исправить неточности! Справочную информацию можно получить по F1 в разделе CWindow:: MessageBox - Microsoft Foundation classes …), например, MessageBox (NULL, "Работает приложение", "Информационное сообщение", 1), затем MessageBox (hWnd, "Работает приложение", "Информационное сообщение", MB_OK), затем MessageBox (hWnd, "Работает приложение", "Информационное сообщение", MB_YESNOCANCEL) (функция MessageBox имеет прототип ВЫВЕСТИ_ОКНО_СООБЩЕНИЯ (ДескрипторТекущегоОкна, СтрокаСообщения, НазваниеОкнаСообщения, СоставКнопокОкнаСообщения). Здесь состав кнопок окна задается кодами MB_OK, MB_OKCANCEL, MB_YESNOCANCEL и др. или их числовыми эквивалентами, а типы возвращаемого результата кодируются как IDYES, IDOK, IDCANCEL и т.д.) и снова выполнить приложение;

включить в приложение функцию из библиотеки MFC, для чего заменить заголовочный файл <windows. h> на файл <afxwin. h>, выполняющий роль шлюза для доступа к классам MFC, и подключить библиотеки через главное меню - Project-Settings-General-Use MFC;

включить в приложение вывод окна сообщения, например, AfxMessageBox ("Вот ОНО и заработало!", 1) и выполнить приложение.

Проанализировать возвращаемый код - выводить сообщение о нажатой клавише окна сообщений.

3. Создать проект (с именем EX2_empty) из двух файлов - один, главный (с расширением cpp) с текстом программы - функцией WinMain, второй - заголовочный (с расширением h) с командами препроцессора. Для этого повторить п.3, модифицировать приложение, заголовочный файл подключить к главному командой препроцессора #include "*. h". Выполнить приложение.

4. Создать каркас (с именем EX3_simple) Windows-приложения (тип Simple) средствами мастера Win32 Application (аналогично п.2). Изучить его свойства: - интерфейс приложения; - файловый состав; - функциональный состав; - ресурсный состав (результаты привести в ОТЧЕТЕ).

5. Создать проект (с именем EX3_simple), модифицировав созданный каркас путем вставки в WinMain функций MessageBox (аналогично п.3).

6. Изучить теоретический материал о сообщениях и типовом каркасе приложения (§§ 4.1-4.3, 5.4).

Cоздать приложение (с именем EX4_simple) на базе типового каркаса приложения ТКП, взяв за основу автоматический каркас мастера Win32 Application типа Simple. Изучить его свойства (привести в ОТЧЕТЕ): - интерфейс приложения; - файловый состав; - функциональный состав; - ресурсный состав.

Для этого:

создать каркас проекта (EX4), тип Simple (см. п.5);

в основной файл проекта (EX4. cpp) вместо имеющегося там текста вставить текст ТКП (см. § 5.4), сохранив только команду #include "stdafx. h";

выполнить приложение.

Повторить создание приложения. Для этого:

создать каркас проекта (EX4), тип Simple (см. п.5);

в основной файл проекта (EX4. cpp) вместо имеющегося там текста вставить текст ТКП (см. ПРИЛОЖЕНИЕ 7), сохранив только команду #include "stdafx. h";

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

Вставить функции MessageBox (аналогично п.3).

7. Изучить теоретический материал об описании и создании окна приложения (§§ 4.8, 4.9).

Cоздать приложение (с именем EX5_simple) модифицировав приложение на базе ТКП. Изменить его интерфейс (вид окна, состав элементов окна - кнопок и т.п.) (результаты привести в ОТЧЕТЕ). Для этого:

создать приложение (EX5_simple) на базе ТКП (см. п.7);

выполнить отмену опции окна ТКП - WS_OVERLAPPEDWINDOW и обеспечить тот же состав окна, но путем поэлементного включения соответствующих элементов (кнопок и т.п.);

внести изменения в параметры:

структуры WNDCLASS (см. ПРИЛОЖЕНИЕ А. Описание полей структуры WNDCLASS, ПРИЛОЖЕНИЕ Б. Встроенные курсоры, ПРИЛОЖЕНИЕ В. Встроенные кисти, ПРИЛОЖЕНИЕ Г. Значения параметра Style);

функции CreateWindow (см. ПРИЛОЖЕНИЕ Д. Значения параметра dwStyle). Например, добавить в окно рамки, полосы прокрутки, убрать или добавить командные кнопки, внести изменения в координаты и размеры окна, использовав соответствующие параметры функции (x, y, Width, Height);

функции ShowWindow (см. ПРИЛОЖЕНИЕ Е. Значения параметра nCmdShow).

8. Изучить теоретический материал о функциях вывода данных в окно приложения. Справочная информация по функциям вывода берется из методического пособия “СОЗДАНИЕ WINDOWS-ПРИЛОЖЕНИЙ В СИСТЕМЕ MICROSOFT VISUAL STUDIO C++", § 1.10 (см. в сети файл - СозданиеWindowsПриложений).

Cоздать приложение (с именем EX6_simple) на базе ТКП. Добавить строку приветствия (координаты 0, 0). Для этого вставить в обработчик сообщения WM_PAINT пользовательский фрагмент, например

char szText [25] = “Работает ТКП”;

TextOut (hdc, 0, 0, szText, strlen (szText));.

Организовать вывод данных, например,

int Х = 2007; char szХasString [100];

wsprintf (szХasString, "Значение Х - %d", Х);

TextOut (hdc, 0, 130, szХasString, strlen (szХasString));.

Вывести в столбик для значений Х от 1 до 10 пары значений: Х - квадрат Х.

Запустить приложение. Выполнить свертывание-развертывание окна, перемещение, изменение размеров окна. Убедиться в автоматической перерисовке содержимого окна.

Добавить вывод номера перерисовки (например, при каждой перерисовке окна увеличивать и выводить номер перерисовки ReDrawNumber++. Здесь int ReDrawNumber = 0 - глобальная переменная).

9. Cоздать приложение (с именем EX7_simple) на базе ТКП. Протабулировать заданную функцию и вывести ее значения в виде таблицы.

10. Cоздать приложение (с именем EX8_simple) на базе ТКП. Включить чувствительность приложения к нажатию левой клавиши “мыши" (сообщению WM_LBUTTONDOWN) и при получении этого сообщения выводить соответствующий MessageBox. Для этого создать в функции-обработчике дополнительную секцию с MessageBox

case WM_LBUTTONDOWN:

………………

// < ФРАГМЕНТ ПОЛЬЗОВАТЕЛЯ >

………………

break;,

аналогичную

case WM_PAINT:

…………………

break;.

Повторить задачу п.9, выполняя все действия в секции case WM_LBUTTONDOWN (секция case WM_PAINT должна быть пустой).

Запустить приложение. Выполнить свертывание-развертывание окна, перемещение, изменение размеров окна. Проанализировать перерисовку содержимого окна.

11. Создать приложение (с именем EX8_1_simple) на базе ТКП. По сообщению WM_LBUTTONDOWN увеличивать координаты точки вывода X, Y на 50 единиц и инициировать перерисовку, по сообщению WM_RBUTTONDOWN уменьшать координаты точки вывода X, Y на 50 единиц и инициировать перерисовку, по сообщению WM_PAINT выводить текст “Работает ТКП”, начиная с позиции X, Y. Координаты точки вывода X, Y описать как глобальные переменные, начальное значение X = 0, Y = 0. Инициировать перерисовку окна функцией InvalidateRect (hWnd,NULL,TRUE).

12. Изучить теоретический материал о каркасе - тип Hello. Справочная информация берется из методического пособия “СОЗДАНИЕ WINDOWS-ПРИЛОЖЕНИЙ В СИСТЕМЕ MICROSOFT VISUAL STUDIO C++", § 4.1.1-4.1.3 (см. в сети файл - СозданиеWindowsПриложений).

Создать каркас (с именем EX9_hello) Windows-приложения (тип Hello) средствами мастера Win32 Application (аналогично п.2). Изучить его свойства: - интерфейс приложения; - файловый состав; - функциональный состав; - ресурсный состав (результаты привести в ОТЧЕТЕ).

Создать проект (с именем EX9_hello), модифицировав созданный каркас путем вставки функций MessageBox в функцию-обработчик сообщений главного окна - LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) в секцию WM_PAINT (использовать оконные функции MessageBox из п.3).

Выполнить изменения интерфейса приложения (§ 4.2.1-4.2.3): - изменить названия пунктов меню (вкладка Resource); - отключить меню; - изменить название главного окна на свою фамилию; - изменить текст в окне-справке; - по нажатию в окне-справке кнопки ОК выводить MessageBox с сообщением выхода из справки; - по завершении работы с приложением выводить MessageBox с соответствующим сообщением.

13. Создать каркас (с именем EX10_hello) Windows-приложения (тип Hello) средствами мастера Win32 Application, повторив п.9.

14. Создать каркас (с именем EX11_hello) Windows-приложения (тип Hello) средствами мастера Win32 Application, повторив п.12.

Литература

1. Б. Страуструп. Язык программирования СИ++.М., Радио и связь, 1991. - 352 с.

2. Паппас К., Мюррей У. Visual C++. Руководство для профессионалов: Пер. с англ. - СПб: BHV - Санкт-Петербург, 1996.

3. Орлов С.А. Технологии разработки программного обеспечения: Учебник для вузов. - СПб.: Питер, 2004. - 527 с.

4. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд. / Пер. с англ. - М.: Издательство БИНОМ, СПб: Невский диалект, 1998 г. - 560 с.

5. Соммервилл И. Инженерия программного обеспечения. - СПб, 2003.

6. Уилсон С. Принципы проектирования и разработки программного обеспечения. Учебный курс. - СПб, 2003.

7. Шилдт Г. Справочник программиста по С/С++, 3-е изд. - М.: Изд. Дом Вильямс, 2003. - 432 с.

8. Одинцов И. Профессиональное программирование. Системный подход. - СПб.: БХВ-Петербург, 2002. - 512 с.

9. Паппас К., Мюррей У. Эффективная работа: Visual C++.net. - СПб.: Питер, 2002. - 816 с.

10. Франка П. С++: учебный курс. - СПб.: Питер, 2005. - 522 с.

11. Мэтт П. Внутренний мир Windows: Пер. с англ. - Киев: НИПФ ДиаСофтЛТД, 1995.

Приложение 1. Описание полей структуры WNDCLASS

Таблица П1.1 Поля структуры WNDCLASS

Имя поля

Значение

Style

определяет стиль класса. Различные стили могут комбинироваться при помощи побитовой операции ("логическое ИЛИ")

IpfnWndProc

указатель на функцию-обработчик окна

cbClsExtra

число дополнительных байтов, выделяемых структуре WNDCLASS (обычно NULL

cbClsExtra

число дополнительных байтов, выделяемых для всех дополнительных структур окна (обычно NULL)

hlnstance

дескриптор экземпляра приложения, регистрирующий стиль окна

hlcon

пиктограмма окна в свернутом виде (обычно NULL)

hCursor

тип курсора, используемый для данного окна (обычно NULL)

hbrBackGround

тип кисти, используемой для фона окна (значением данного параметра может быть как идентификатор физической кисти, так и значение цвета)

IpszMenuName

указатель строки - имени, дескриптора ресурса - меню (по умолчанию NULL)

IpszClassName

указатель строки - уникального имени класса окна

Приложение 2. Значения параметра hCursor структуры WNDCLASS (встроенные курсоры)

Таблица П2.1 Некоторые стандартные курсоры

Имя курсора

Форма курсора

IDC_ARROW

стандартный указатель типа "стрелка"

IDC_CROSS

указатель типа “перекрестие”

IDC_IBEAM

текстовый курсор

IDC_WAIT

указатель типа “песочные часы”

Приложение 3. Значения параметра hbrBackGround структуры WNDCLASS (встроенные кисти и цвета закраски фона окна)

Таблица П3.1 Некоторые стандартные кисти

Имя кисти, цвет кисти

Тип фона

BLACK_BRUSH

черный

DKGRAY_BRUSH

темно-серый

HOLLOW_BRUSH

прозрачный

LTGRAY_BRUSH

светло-серый

WHITE BRUSH

белый

COLOR_SCROLLBAR, COLOR_BACKGROUND, COLOR_ HIGHLIGHT, COLOR_ACTIVECAPTION, COLOR_HIGHLIGHTTEXT, COLOR_WINDOW, COLOR_WINDOWTEXT, COLOR_CAPTIONTEXT, COLOR_ APPWORKSPACE

при использовании цвета к его значению нужно прибавить 1

Приложение 4. Значения параметра Style структуры WNDCLASS

Таблица П4.1 Значения параметра Style

Параметр

Значение

CS_BYTEALIGNCLIENT (CS_BYTEALIGNWINDOW)

использовать границы по байту по оси X и производить выравнивание клиентской области окна (использовать границы по байту по оси X и производить выравнивание окна)

CS_DBCLKS

посылать окну сообщения о двойном щелчке "мыши"

CS_HREDRAW

перерисовывать содержимое клиентской области окна при изменении размера окна по горизонтали

CS_KEYCVTWINDOW

выполнять преобразование виртуальных клавиш

CS_NOCLOSE

без пункта закрытия окна в системном меню

CS_NOKEYCVT

не выполнять преобразование виртуальных клавиш

CS_OWNDC

присваивать каждому экземпляру окна свой контекст устройства

CS_PARENTDC

окну передавать контекст устройства родительского окна

CS_SAVEBITS

сохранять часть окна, перекрытую на экране другим окном

CS_VREDRAW

перерисовывать окно при изменении размера по вертикали

Приложение 5. Значения параметра dwStyle функции CreateWindow (доопределение стиля окна)

Таблица П5.1 Значения параметра dwStyle

Параметр стиля

Описание

WS_BORDER

создание окна с рамкой

WS_CAPTION

добавление к окну с рамкой заголовка

WS_CHILD

создание дочернего окна

WS_CHILDWINDOW

создание дочернего окна стиля WS_CHILD

WS_CLIPCHILDREN

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

WS_CLIPSIBLINGS

(только со стилем WS_CHILD) не использовать при получении данным окном сообщения о перерисовке области, занятые другими дочерними окнами. Иначе разрешается рисовать в клиентской области другого дочернего окна

WS_DISABLED

создание первоначально неактивного окна

WS_DLGFRAME

создание окна с двойной рамкой без заголовка

WS_EX_

ACCEPTFILES

создание окна, поддерживающего метод ""drag-and-drop"

WS_EX_

DLGMODALFRAME

(только для значения dwExStyle) создание окна с двойной рамкой и дополнительным заголовком

WS_EX_

NOPARENTNOTIFY

создание дочернего окна, которое не будет посылать родительскому окну сообщение WM_PARENTNOTIFY при создании или разрушении

WS_EX_TOPMOST

созданное окно должно располагаться поверх всех окон, не имеющих этого стиля, и оставаться поверх остальных даже в неактивном состоянии

WS_EX_

TRANSPARENT

созданное окно должно быть прозрачным, т.е. все окна, расположенные под данным окном, не заслоняются им

WS_GROUP

(только в диалоговых окнах) стиль указывается для первого элемента управления в группе элементов, пользователь перемещается между ними с помощью клавиш-стрелок

WS_HSCROLL

создание окна с горизонтальной полосой прокрутки

WS_MAXIMIZE WS_MINIMIZE

создание окна максимального (минимального) размера

WS_MAXIMIZEBOX WS_MINIMIZEBOX

создание окна с кнопкой максимизации (минимизации)

WS_OVERLAPPED

создание перекрывающегося окна

WS_OVERLAPPEDWINDOW

создание перекрывающегося окна на базе стилей WS_OVERLAPPED, WS_THICKFRAME и WS_SYSMENU

WS_POPUP

(не используется с окнами стиля WS_CHILD) создание временного окна

WS_

POPUPWINDOW

создание временного окна на базе стилей WS_BORDER, WS_POPUP и WS_SYSMENU

WS_SYSMENU

(только для окон с заголовком) создание окна с кнопкой вызова системного меню вместо стандартной кнопки, позволяющей закрыть окно при использовании этого стиля для дочернего окна

WS_TABSTOP

(только в диалоговых окнах) указывает на произвольное количество элементов управления (стиль WS_TABSTOP), между которыми можно перемещаться клавишей <ТаЬ>

WS_THICKFRAME

создание окна с толстой рамкой, используемой для изменения размеров окна

WS_VISIBLE

создание окна, видимого сразу после создания

WS_VSCROLL

создание окна с вертикальной полосой прокрутки

Приложение 6. Значения параметра nCmdShow функции ShowWindow (доопределение состояния окна при начальном запуске)

Таблица П6.1 Состояния окна при запуске (параметры в ShowWindow)

Параметр состояния

Описание

SW_HIDE

прячет окно и переводит в активное состояние другое окно

SW_MIINIMIZE

минимизирует окно и активизирует окно верхнего уровня

SW_RESTORE

действует так же, как и SW_SHOWNORMAL

SW_SHOW

активизирует окно и выводит его в текущей позиции и текущего размера

SW_SHOWDEFAULT

активизирует окно и выводит его с использованием текущих умолчаний

SW_SHOWMAXIMIZED

активизирует окно и выводит его с максимальным размером

SW_ SHOWMINIMIZED

активизирует окно и выводит его в виде пиктограммы

SW_SHOWMINNOACTIVATE

выводит окно как пиктограмму, при этом ранее активное окно сохраняет свою активность

SW_SHOWNA

выводит окно с учетом его состояния в данный момент; (активное в данный момент окно остается активным)

SW_SHOWNOACTIVATE

выводит окно в его прежней позиции и прежнего размера (активное в данный момент окно остается активным)

SW_SHOWNORMAL

активизирует окно и выводит его на экран. Если окно было увеличено или уменьшено до пиктограммы, то система Windows восстановит начальное положение и размер окна

SW_SHOWSMOOTH

Выводит окно так, чтобы оно минимально перекрывалось другими окнами

Приложение 7. Описание ТКП

// =========== описания глобальных объектов =============

LRESULT CALLBACK <ИмяОбработчикаОкна> (HWND, UINT, WPARAM, LPARAM);

char szWindowStyle [] = <ИмяСтиляОкна>;

// ================ГЛАВНАЯ ФУНКЦИЯ===================

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPreInst,

LPSTR lpszCmdLine, int nCmdShow)

{

HWND hWnd;

MSG lpMsg;

WNDCLASS wcApp;

wcApp. lpszClassName = szWindowStyle;

wcApp. hInstance = hInst;

wcApp. lpfnWndProc = <ИмяОбработчикаОкна>;

wcApp. hCursor = LoadCursor (NULL, IDC_ARROW);

wcApp. hIcon = 0;

wcApp. lpszMenuName = 0;

wcApp. hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

wcApp. style = CS_HREDRAW | CS_VREDRAW;

wcApp. cbClsExtra = 0;

wcApp. cbWndExtra = 0;

if (! RegisterClass (&wcApp)) return 0;

hWnd = CreateWindow (szWindowStyle, "КАРКАС Приложения",

WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, (HWND) NULL,

(HMENU) NULL, hInst, NULL);

ShowWindow (hWnd, nCmdShow);

UpdateWindow (hWnd);

while (GetMessage (&lpMsg, NULL, 0, 0))

{

TranslateMessage (&lpMsg);

DispatchMessage (&lpMsg);

}

return (lpMsg. wParam);

}

// === ФУНКЦИЯ-ОБРАБОТЧИК СООБЩЕНИЙ ГЛАВНОГО ОКНА ===

LRESULT CALLBACK <ИмяОбработчикаОкна> (HWND hWnd, UINT Mess,

WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

switch (Mess)

{

case WM_PAINT:

hdc = BeginPaint (hWnd, &ps);

// < ФРАГМЕНТ ПОЛЬЗОВАТЕЛЯ >

ValidateRect (hWnd,NULL);

EndPaint (hWnd, &ps);

break;

// case < КодСообщения >:

// hdc = BeginPaint (hWnd, &ps);

// < ФРАГМЕНТ ПОЛЬЗОВАТЕЛЯ >

// ValidateRect (hWnd,NULL);

// EndPaint (hWnd, &ps);

// break;

case WM_DESTROY:

PostQuitMessage (0);

break;

default:

return DefWindowProc (hWnd, Mess, wParam, lParam);

}

return 0;

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.