Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Каркас приложения Windows




 

Теперь; когда мы обсудили все необходимые основные понятия, можно начать разработку простейшего приложения Windows. Как уже отмечалось, все Windows-программы имеют определенные общие черты. Таким образом, в этом разделе мы разрабатываем программу, которая может быть каркасом или шаблоном для любого другого приложения. Технология написания программ для Windows предполагает широкое использование таких каркасов, поскольку, в отличие от DOS, простейшая программа для которой занимает около 5 строк, простейшая программа для Windows содержит примерно 50 строк.

Простейшая программа для Windows состоит из двух функций – WinMain() и оконной функции. Функция WinMain() обычно должна выполнять следующие действия:

1. Определение класса окна.

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

3. Создание окна данного класса.

4. Отображение окна.

5. Запуск цикла обработки сообщений.

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

 

Пример 2-1. Итак, рассмотрим простейшую программу для Windows. Она создает стандар­тное окно, которое имеет заголовок, системное меню и кнопки минимизации, полноэкранной развертки и закрытия окна. Это окно можно перемещать по экрану и изменять его размер.

 

// Каркасное приложение Windows

#include <Windows.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM,

LPARAM);

char szWinName[]="МоеОкно"; // Имя класса окна

 

int WINAPI WinMain(HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

{

HWND hwnd;

MSG msg;

WNDCLASS wcl; // Определить класс окна

wcl.hInstance=hThisInst; // Дескриптор приложения

wcl.lpszClassName=szWinName;// Имя класса окна

wcl.lpfnWndProc=WindowFunc; // Функция окна

wcl.style=0; // Стиль по умолчанию

wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);// Иконка

wcl.hCursor=LoadCursor(NULL,IDC_ARROW); // Курсор

wcl.lpszMenuName=NULL; // Без меню

wcl.cbClsExtra=0; // Без дополнительной информации

wcl.cbWndExtra=0;

wcl.hbrBackground=

(HBRUSH)GetStockObject(WHITE_BRUSH); //Белый фон

if(!RegisterClass(&wcl)) // Регистрируем класс окна

return 0;

hwnd=CreateWindow(szWinName, // Создать окно

"Каркас программы для Windows",

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

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

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

CW_USEDEFAULT, // Ширина



CW_USEDEFAULT, // Высота

HWND_DESKTOP, // Нет родител. окна

NULL, // Нет меню

hThisInst,// Дескриптор приложения

NULL); // Нет дополнит. аргументов

ShowWindow (hwnd, nWinMode); // Показать окно

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

 

while(GetMessage(&msg,NULL,0,0)) // Запустить цикл

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

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

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

}

return msg.wParam;

}

 

// Следующая функция вызывается операционной

// системой Windows и получает в качестве

// параметров сообщения из очереди сообщений

// данного приложения

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

{

switch(message)

{

case WM_DESTROY: // Завершение программы

PostQuitMessage (0);

break;

default:

// Все сообщения, не обрабатываемые в

// данной функции, направляются на обработку

// по умолчанию

return DefWindowProc(hwnd,message,

wParam,lParam);

}

return 0;

}

 

Теперь подробно, шаг за шагом, рассмотрим эту программу. Прежде всего, все программы для Windows должны включать в себя файл описаний Windows.h. Как уже говорилось, этот файл содержит прототипы функций API, а также определения типов данных и макроопределения, используемые в профаммах для Windows. Например, типы данных HWND и WNDCLASS опреде­лены в Windows.h.

Оконная функция, используемая программой, названа WindowsFunc(). Она вызы­вается операционной системой для взаимодействия с программой.

Выполнение программы начинается с WinMain(), которой передается четыре параметра.



Параметры hThisInst и hPrevInst являются дескрипторами:

hThisInst – это дескриптор текущего экземпляра приложения (поскольку Windows – многозадачная система, в ней может одновременно работать несколько экземпляров одной и той же програм­мы);

hPrevInst – этот дескриптор всегда будет равен NULL.

Параметр lpszArgs является указателем на строку, содержащую аргументы программы при ее запуске. Параметр nWinModeопределяет способ визуализации окна при запуске программы.

В функции WinMain()определяются три переменные. Переменная hwnd будет содержать дескриптор главного окна программы. Структура msg станет буфером для хранения сообщений, а структура wclбудет использоваться для определения класса окна.

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал