Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / Теория / ОСиСП ответы на некоторые вопросы.doc
Скачиваний:
81
Добавлен:
11.05.2015
Размер:
1.38 Mб
Скачать

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

Окно в Windows всегда создается на основе своего оконного класса. Оконный класс представляет собой запись с основными свойствами всех окон класса (форма курсора в рабочей области окна, адрес процедуры обработки сообщений). В Windows существует набор стандартных классов с заранее заданными свойствами. Как правило, любая программа для своего главного окна регистрирует оконный класс. Имя класса выбирается программистом произвольно.

Style – битовые флаги задающие начальные свойства всех окон данного класса

wndc.style = CS_HREDRAW | CS_VREDRAW;

LpfnWndProc – указатель на callback-функцию вызываемую для обработки сообщений адресованных окнам данного класса. Callback-функция отличается от обычной тем, что вызывается из вне прикладной программы. В данном случае она вызывается ОС.

wndc.lpfnWndProc = (WNDPROC)WndProc;

cbclsExtra – задает дополнительное количество байт выделяемое за структурой оконного класса.

wndc.cbClsExtra = 0;

cbWndExtra – дополнительное количество байт выделяемое для экземпляра окна

wndc.cbWndExtra = 0;

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

wndc.hInstance = hInst;

hIcon - Дескриптор пиктограммы

wndc.hIcon = LoadIcon(0, IDI_APP_DEFAULTICON);

hCursor – дескриптор курсора, который рисуется в пределах рабочей области окна

wndc.hCursor = LoadCursor(0, IDC_ARROW);

hbrBackground – дескриптор кисти для заливки фона

wndc.hGrBackground = GetDefObject(GRAY_BRUSH);

lpszMenuName – идентификатор меню из ресурсов прикладных программ

wndc.lpszMenuName = NULL;

lpsz ClassName – строковый идентификатор оконного класса в ОС.

wndc.lpszClassName = “MyMinWinApp”;

Регистрация оконного класса выполняется с помощью функции

BOOL RegisterClass(WNDCLASS* wndClass);

Создание и отображение окна.

Для создания окна существует функция

HWND CreateWindow(

LPCTSTR lpClassName, // registered class name

LPCTSTR lpWindowName, // window name

DWORD dwStyle, // window style

int x, // horizontal position of window

int y, // vertical position of window

int nWidth, // window width

int nHeight, // window height

HWND hWndParent, // handle to parent or owner window

HMENU hMenu, // menu handle or child identifier

HINSTANCE hInstance, // handle to application instance

LPVOID lpParam // window-creation data

);

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

Для отображения окна используется функция:

BOOL ShowWindow(HWND hWnd, int nCmdShow);

Для обновления содержимого окна используется функция:

void UpdateWindow(HWND hWnd);

Она заставляет окно перерисовать свою область, посылая сообщения WM_PAINT.

Практически вся логика работы программы под Windows размещается в оконных функциях.

ОКОННАЯ ФУНКЦИЯ

RESULT CALLBACK WndProc(HWND Wnd, UINT message, WPARAM wParam, LPARAM lParam);

Описание функции включает директиву CALLBACK, которая делает эту функцию доступной для вызова извне приложения. Параметры оконной функции соответствует полям структуры MSG. Структура MSG описывает сообщение.

typedef struct tagMSG

{

HWND hwnd; // дескриптор окна, в котором возникло сообщение

UINT message; // код сообщения (WM_<сообщение>. Пользовательские

// сообщения начинаются с WM_USER)

WPARAM wParam; // Доп. Информация (зависит от типа сообщений)

LPARAM lParam; // Доп. Информация (зависит от типа сообщений)

DWORD time; // Система помещает время в миллисекундах, которое истекло

//с момента запуска системы, до постановки сообщения в //очередь

POINT pt; //Указывает позицию курсора мыши в экранных координатах

//на момент возникновения сообщения

} MSG, *PMSG;