- •Ф едеральное агенство воздушного транспорта (росавиация)
- •Аннотация
- •Оглавление
- •Введение
- •Техническое задание
- •Теоретические сведения Особенности ос Windows
- •Методы создания Windows приложения и характеристика функций api
- •Описание среды разработки
- •Создание win32 приложения Файлы проекта
- •Список литературы
- •Руководство пользователя
- •Листинг программ Файл test.Cpp
- •Структура программы
Методы создания Windows приложения и характеристика функций api
Существует несколько методов создания Win32 приложений, вот некоторые из них:
Использование языка программирования C/C++ с библиотекой WinAPI: Этот метод является одним из наиболее распространенных. WinAPI предоставляет набор функций и структур, которые позволяют взаимодействовать с операционной системой Windows.
Использование .NET Framework: Вы можете создавать Win32 приложения с использованием языков программирования, поддерживаемых .NET Framework, таких как C# и VB.NET. .NET Framework предоставляет набор классов и библиотек для работы с Win32 API.
Использование фреймворков, таких как Qt или WxWidgets: Эти фреймворки позволяют создавать кроссплатформенные приложения, включая Win32 приложения, используя собственные классы и методы для работы с графическим интерфейсом, событиями и другими аспектами приложения.
Использование сред разработки, таких как Microsoft Visual Studio: Среды разработки, такие как Visual Studio, предоставляют инструменты для создания Win32 приложений, включая графические дизайнеры, отладчики и компиляторы.
Выбор метода зависит от ваших предпочтений, целей проекта и опыта в программировании.
В Windows API, неофициально WinAPI, является базовым интерфейсом прикладного программирования (API), который позволяет компьютерной программе получать доступ к функциям операционной системы Microsoft Windows, в которой запущена программа.
Каждая основная версия Windows API имеет другое название, которое определяет аспект совместимости этой версии. Например, Win32 - это основная версия Windows API, которая работает в 32-разрядных системах. Название Windows API в совокупности относится ко всем версиям этой возможности Windows.
Классическая структура API-программы определяется четырьмя компонентами: инициализация; цикл ожидания, или цикл обработки сообщений; функция главного окна; другие функции. В простейшем случае последний компонент может отсутствовать.
Функции API, использованные при разработке приложения [1], [4]:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
Эта функция эквивалентна функции main для DOS или UNIX, то есть с нее
всегда начинается выполнение программы.
Функция возвращает значение типа int и принимает следующие параметры:
- HINSTANCE hInstance —дескриптор, который Windows присваивает запущенному приложению.
- HINSTANCE hPrevInstance — в Win32 этот параметр не используется и поэтому всегда принимает нулевое значение.
- LPSTR lpCmdLine — указатель на строку, в которую копируются аргументы приложения, если оно запущено в режиме командной строки. Запуск приложения в этом режиме возможен либо с помощью команды стартового меню Пуск -> Выполнить, либо из оболочки типа Norton Commander. При этом в командной строке набирается имя приложения, а после пробела указываются аргументы, разделенные также символом пробела. Есть еще один способ запуска приложения в этом режиме — через ярлык EXE-файла. Если у вас создан такой ярлык (являющийся ссылкой на EXE-файл), то щелкните на пиктограмме ярлыка правой кнопкой мыши и выберите в контекстном меню пункт Свойства. Затем в появившемся диалоговом окне Свойства укажите параметры командной строки, введя их в текстовое поле Object.
- int nCmdShow — целое значение, которое может быть передано функции ShowWindow.
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
Ее параметры интерпретируются следующим образом:
- hWnd — дескриптор родительского окна. Он принимает значение NULL, если родительского окна нет.
- lpText — указатель на строку, содержащую текст сообщения.
- lpCaption — указатель на строку, содержащую текст заголовка диалогового окна.
- uType — параметр содержит комбинацию флагов, задающих количество и типы кнопок в диалоговом окне, а также наличие заданной пиктограммы.
typedef struct tagWNDCLASSEX {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground
LPCTSTR lpszMenuName
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX;
Структура имеет тип WNDCLASSEX и имеет следующие параметры:
- UINT cbSize — размер данной структуры в байтах.
- UINT style — стиль класса окна.
- WNDPROC lpfnWndProc — указатель на функцию окна (оконную процедуру).
- int cbClsExtra — число дополнительных байтов, которые должны быть распределены в конце структуры класса.
- int cbWndExtra — число дополнительных байтов, которые должны быть распределены вслед за экземпляром окна.
- HINSTANCE hInstance — дескриптор экземпляра приложения, в котором находится оконная процедура для этого класса.
- HICON hIcon — дескриптор курсора.
- HCURSOR hCursor — дескриптор курсора.
- HBRUSH hbrBackground — дескриптор кисти, используемый для закраски фона окна
- LPCTSTR lpszMenuName — указатель на строку, содержащую имя меню, применяемого по умолчанию для этого класса.
- LPCTSTR lpszClassName — указатель на строку, содержащую имя класса окна.
- HICON hIconSm — дескриптор малой пиктограммы.
HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName);
Эта функция загружает ресурс пиктограммы, заданный параметром lpIconName, из экземпляра приложения, указанного параметром hInstance2. Функцию можно использовать также для загрузки одной из системных (предопределенных) пиктограмм, если передать первому аргументу значение NULL. В этом случае второй аргумент должен содержать константу, идентификатор которой начинается с префикса IDI_ («идентификатор значка» — ID for icon).
HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
Эта функция загружает ресурс курсора, заданный вторым параметром (lpCursor-Name), из экземпляра приложения, заданного первым параметром (hInstance). Функцию можно также использовать для загрузки одного из системных (предопределенных) курсоров, если передать первому аргументу значение NULL.
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lParam
);
Ее параметры интерпретируются следующим образом:
- LPCTSTR lpClassName — имя зарегистрированного класса.
- LPCTSTR lpWindowName — имя окна.
- DWORD dwStyle — стиль окна.
- int x — горизонтальная позиция.
- int y — вертикальная позиция.
- int nWidth — ширина окна.
- int nHeight — высота окна.
- HWND hWndParent — дескриптор родительского окна.
- HMENU hMenu — дескриптор меню окна или идентификатор элемента управления.
- HINSTANCE hInstance — дескриптор экземпляра приложения
- LPVOID lParam — указатель на данные, передаваемые в сообщении WM_CREATE
BOOL ShowWindow(HWND hWnd, int nCmdShow);
Первым параметром функции является дескриптор окна, а второй параметр определяет, в каком виде будет показано окно. При начальном отображении главного окна рекомендуется присваивать второму параметру то значение, которое передается приложению через параметр nCmdShow функции WinMain.
Цикл обработки сообщений присутствует во всех приложениях Windows. Правда, не всегда этот цикл представлен явно в программе.
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); DispatchMessage(&msg);
}
В цикле сообщения присутствует три функции. Эти функции есть там всегда, но кроме них в цикле могут быть и другие. Функция GetMessage() выбирает из очереди сообщений приложения очередное приложение. Вместо этой функции используют так же функции PostMessage() и PeekMessage(). Во всех трех функциях присутствует указатель на строку MSG:
typedefstruct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM IParam;
DWORD time;
POINT pt;
} MSG;
Ее параметры интерпретируются следующим образом:
- HWND hwnd — дескриптор окна, которому адресовано сообщение.
- UINT message — номер (идентификатор) сообщения.
- WPARAM wParam — параметр сообщения wParam.
- LPARAM IParam — параметр сообщения IParam.
- DWORD time — время отправки сообщения.
- POINT pt — позиция курсора (в экранных координатах) а момент отправки сообщения.
BOOL GetMessageBox
(
LPMSG IpMsg; HWND hWnd; UINT wMsgFilterMin, UINT wMsgFilterMax;
)
Первый параметр функции - указатель на строку MSG, куда и будет помещена получаемая информация. Вторым параметром является дескриптор окна, которому предназначено сообщение. Если параметр равен NULL, то "отталкиваются" все сообщения, получаемые приложением. Два последних параметра определяют диапазон сообщений. Для того чтобы получать сообщения из всего диапазона, эти параметры должны быть равны 0.
