LPSTR lpszCmdParam,
int nCmdShow )
{ WNDCLASS WndClass;
HWND hWindow;
MSG Msg;
WndClass.lpszClassName = szAppName;
WndClass.style = NULL;
WndClass.lpfnWndProc = DefWindowProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInst;
WndClass.hIcon = LoadIcon ( NULL, IDI_APPLICATION );
WndClass.hCursor = LoadCursor ( NULL, IDC_ARROW );
WndClass.hbrBackground = ( HBRUSH ) GetStockObject( WHITE_BRUSH );
WndClass.lpszMenuName = NULL;
if ( !hPrevInstance )
if ( !RegisterClass ( &WndClass ) )
return FALSE;
hWindow = CreateWindow ( szAppName,
"Hello world!",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInst, NULL );
if ( hWindow == NULL )
return FALSE;
ShowWindow ( hWindow, nCmdShow );
UpdateWindow ( hWindow );
while ( GetMessage( &Msg, NULL, 0, 0 ) )
{
TranslateMessage ( &Msg );
DispatchMessage ( &Msg );
}
return Msg.wParam;
}
Структура функции WinMain:
1. Регистрация класса окна
- заполнение структуры WNDCLASS;
- вызов функции RegisterClass.
2. Создание окна
- вызов функции CreateWindow для создания окна ( объекта ) на основе класса окна.
3. Отображение окна
- ShowWindow для визуального отображения окна;
- UpdateWindow для обновления клиентной облясти окна.
4. Запуск цикла обработки сообщений
- GetMessage предназначена для выборки сообщения из очереди приложения;
- TranslateMessage предназначена для обработки сообщений клавиатуры;
- DispatchMessage предназначена для распределения выбранного сообщения нужной оконной процедуре.
Создание окна приложения с использованием функций API
Windows представляет собой трехшаговый процесс:
- определение класса окна;
- создание окна ( объекта на основе класса );
- окно делается видимым.
Класс окна определяется заполнением структуры WNDCLASS.
Структура определена в файле windows.h следующим образом:
typedef struct tagWNDCLASS
{
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;
Назначение полей структуры:
style - стиль класса окна.
lpfnWndProc - адрес функции окна.
cbClsExtra - число байтов памяти, резервируемых дополнительно к области описания класса.
cbWndExtra - число байтов памяти, резервируемых дополнительно к области описания окна.
hInstance - идентификатор приложения, создающего класс окна.
hIcon - идентификатор класса пиктограммы.
hCursor - идентификатор класса курсора.
hbrBackground - идентификатор класса кисти цвета фона.
lpszMenuName - указатель на строку, содержащую имя класса меню.
lpszClassName - указатель на строку, содержащую имя класса окна.
Переменная Msg предназначена для временного хранения сообщений и представляет собой структуру типа MSG, описанную в файле windows.h следующим образом:
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Назначение элементов структуры MSG:
hwnd - идентифицирует окно, оконная процедура которого получает сообщение. Каждое окно в системе имеет уникальный логический номер;
message - определяет номер ( тип ) сообщения;
wParam - определяют дополнительную информацию, связанную
lParam с сообщением. Конкретное значение зависит от номера сообщения;
time - определяет время постановки сообщения в очередь;
pt - определяет положение курсора в экранных координатах в момент посылки сообщения.
Все сообщения, попавшие в очередь приложения и распределенные функции окна, должны быть обработаны. Для этого необходимо использовать оконную процедуру обработки сообщений по умолчанию DefWindowProc. Если оконная процедура проигнорирует вызов функции DefWindowProc для тех сообщений, которая она сама не обрабатывает, ОС Windows не сможет обработать такие сообщения, что может привести к непредсказуемым последствиям.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.