Базовые элементы Windows-приложений. Проект типа Win32 Application

Страницы работы

Содержание работы

Семестр 3

Практическое занятие 1:  Базовые элементы Windows-приложений. Проект типа Win32 Application

Что нужно предварительно знать для выполнения задания:

..1 API

(application programming interface) – интерфейс прикладного программирования (набор программ, формирующих интерфейс между Вашим приложением и компьютером в целом: например, создание окон на экране, их перемещение и изменение, взаимодействие с «мышью», управление файлами, каталогами, памятью...).

..2 #include <windows.h>

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

WINDEF.H - определение фундаментальных типов

WINBASE.H – базовый 32-разрядный программный интерфейс

WINGDI.H – интерфейс графических устройств

WINUSER.H – объявления из USER.EXE или ассоциированные с ним и некоторые другие.

..3 Директива препроцессора STRICT

– вызывает строгую проверку типов компилятором в Ваших программах. Рекомендуется, так как облегчает Ваш скорбный труд по отладке кода.

..4 Функция WinMain()

обязательна для каждого Windows-приложения - это «точка входа» приложения.

Прототип функции (находится в WINBASE.H):

int  WINAPI WinMain(HINSTANCE hInst,   //идентификатор приложения – является указателем // («адрес памяти», с которого загружается EXE-модуль)

HINSTANCE hPrevInsance, //в WIN32 не имеет смысла и равен NULL

LPSTR lpszCmdParam,    //содержит любую информацию, передающуюся //из командной строки (не содержит имя текущего исполняемого //файла). Чтобы получить эту информацию, используйте функцию //GetCommandLine()

int nCmdShow);       //как приложение должно появиться на экране

Возвращаемое значениеint. Если приложение завершается корректно (при получении WM_QUIT –сообщения), то WinMain должна вернуть wParam этого сообщения. Если функция заканчивается “аварийно” (до входа в цикл сообщений), то она должна вернуть ноль. Замечание: есть мнение, что Windows в действительности не проверяет возвращаемое значение, а предназначаются возвращаемые значения прежде всего для отладки или чтобы сделать Вашу программу более читабельной.

Ключевое слово WINAPI обозначает тип вызова функции– определено в WINDEF.H для WIN32-приложений как

#define WINAPI      __stdcall  (соглашение о вызове и порядке помещения параметров в стек)

Замечание 1: в былые времена для 16-разрядных приложений использовалось соглашение о вызовах  FAR PASCAL, а для WIN32 - __stdcall (не подчиняется соглашениям о вызове cdecl и Pascal).

Замечание 2:вместо спецификатора WINAPI можно использовать спецификатор APIENTRY, который, в принципе, означает то же самое.

..5 Основные этапы функции WinMain

WinMain (если Вы действительно хотите создать Windows-приложение) должна содержать четыре секции:

..5.1 Регистрация окна

– для того, чтобы зарегистрировать класс окна, следует объявить и заполнить структуру типа WNDCLASS и передать эту структуру в виде параметра функции RegistterClass()

static char szAppName[] = “Мое приложение”;

WNDCLASS          w;      //объявление структуры атрибутов класса окна

memset( &w, 0, sizeof(WNDCLASS) );        //рекомендуется обнулить все байты структуры //(соответственно обнуляются все поля), для того, чтобы все не //заданные Вами явно поля оказались нулевыми – на нулевые поля //фунция создания окна отреагирует корректно, а на случайные //значения вряд ли

w.style = CS_HREDRAW | CS_VREDRAW; //обычно передаваемые стили окна – окно //перерисовывает, если меняется соответственно его горизонтальный //или вертикальный размер. Остальные стили – смотри Help

w.lpfnWndProc = WndProc;      //имя Вашей оконной процедуры

w.hInstance = hInst;                 //дескриптор приложения, передаваемый функции WinMain

w.hIcon = LoadIcon(NULL, IDI_APPLICATION);   //загружает стандартную иконку Windows

w.hCursor = LoadCursor(NULL, IDC_ARROW);    // загружает стандартный курсор Windows

w.hbrBackground = GetStockObject (WHITE_BRUSH);    //стандартный цвет фона окна

w.lpszClassName = szAppName;

if( RegisterClass(&w) == 0 ) return FALSE;

Функция LoadIcon() :

HICON        LoadIcon( HINSTANCE hInstance, // handle of application instance

LPCTSTR lpIconName); // указывает на строку, содержащую                                                                                                  //идентификатор ресурса пиктограммы загружает пиктограмму из: ресурса .EXE-файла, если параметр hInstance является дискриптором приложения (!=NULL) и стандартную иконку Windows, если hInstance ==NULL

Для стандартных пиктограмм:

IDI_APPLICATION – иконка по умолчанию.

IDI_ASTERISK – используется в информативных сообщениях

Похожие материалы

Информация о работе