Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
основы программирования в Windows.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
88 Кб
Скачать
☆

1.2.4. Создание элементарного графического окна

Рассмотрим, как создать элементарное графическое окно в Windows. Как уже указывалось выше, главной функцией для разработки такой программы будет WinMain(). Сразу после входа в WinMain() создается и регистрируется класс главного окна прило-жения. Для этого необходимо заполнить структуру WNDCLASS. Для создания окна ис-пользуются функции CreateWindow() непосредственно для его создания, ShowWindow() для визуализации и UpdateWindow() для перерисовки. Все эти функции описаны в файле windows.h. Рассмотрим структуру WNDCLASS и наиболее значимую функцию Create-Window() более подробно.

Структура WNDCLASS состоит из 10 полей:

typedef struct tagWNDCLASS

{

UINT cbSize; //размер структуры в байтах

UINT style; //стиль класса окна

WNDPROC lpfnWndProc; // указатель на функцию окна

HINSTANCE hInstance; //дескриптор приложения, которое запускает окно

HICON hIcon; //дескриптор пиктограммы

HCURSOR hCursor; // дескриптор курсора

HBRUSH hbrBackground; // дескриптор кисти для закраски фона

LPCTSTR lpszMenuName; //указатель на строку с именем меню

LPCTSTR lpszClassName; // указатель на строку с именем класса

HICON hIconSm; //дескриптор малой пиктограммы

} WNDCLASS;

Функция CreateWindow() получает на входе 11 параметров:

HWND CreateWindow (

LPCTSTR lpClassName, // зарегистрированное имя класса

LPCTSTR lpWindowName, // имя окна

DWORD dwStyle, // стиль окна

int x, // x -координата позиции окна

int y, // y -координата позиции окна

int nWidth , // ширина окна

int nHeight , // высота окна

HWND hWndParent , // указатель родительского окна

HMENU hMenu , // дескриптор меню, NULL если меню нет

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

LPVOID lParam );// данные, которые могут быть переданы создания окна

// NULL если данные не передаются

Для примера рассмотрим исходный текст программы, которая создает элементарное окно в Windows.

#include "windows.h"

#include "windowsx.h"

// функция для управления параметрами создания и уничтожения главного окна

// запуск всех дополнительных элементов окна (если они есть) производится в ней

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

// главная функция

WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

Int nCmdShow)

{

// описываем параметры, которые необходимы для создания окна

HWND hwnd; // указатель класса окна

MSG msg; // Структура MSG содержит информацию

//о сообщениях из очереди потока сообщений.

WNDCLASS w; // структура определяющая класс окна

memset(&w,0,sizeof(WNDCLASS)); //выделение памяти для класса окна

w.style = 0; // стиль окна по умолчанию

w.lpfnWndProc = WndProc; // функция окна

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

w.hbrBackground = GetStockBrush(WHITE_BRUSH); // цвет для

//заполнения окна

w.lpszClassName = "API Windows";// имя класса окна

RegisterClass(&w); //Регистрируем класс окна

// Создаем окно

hwnd = CreateWindow("API Windows",//имя класса

"API Windows", //название окна

WS_OVERLAPPEDWINDOW,// стиль окна

10,//x - координата

10,//y- координата

600,//ширина

480,//высота

NULL,//нет родительского окна

NULL,//нет меню

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

NULL);//не передаем данных

ShowWindow(hwnd,nCmdShow);//активация окна

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

//Цикл обработки сообщений

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

{

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

DispatchMessage(&msg); // вернуть управление Windows

}

//возвращаемое значении для функции WndProc()

return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message,

WPARAM wparam,LPARAM lparam)

{

if (Message == WM_DESTROY )

{

PostQuitMessage(0);

return 0;

}

return DefWindowProc(hwnd,Message,wparam,lparam);

}

Компиляция и компоновка проекта приводит к созданию exe-файла, запуск которо-го приводит к появлению окна, представленного на рис.1.1.