- •§ 1.2. Основы программирования в ос Windows
- •1.2.1. Принципы взаимодействия ос Windows с прикладными программами
- •1.2.2. Типы данных в Windows
- •1.2.3. Графический и консольный интерфейс
- •1.2.4. Создание элементарного графического окна
- •Int nCmdShow)
- •Общие черты.
- •§ 1.3. Принципы разработки динамических библиотек
- •1.3.1. Основные положения
- •1.3.2. Главная функция DllMain()
- •If(bAll WentWell)
- •1.3.3. Экспортирование функций из dll
- •Int sharedInts[10] ;
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.
