Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab2.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
964.1 Кб
Скачать

1.8.7. Соглашение об использовании имен

Если раньше вы не занимались программированием под Windows, то имена некоторых переменных и параметров функций в текстах программ, приведенных в книге, могут показаться вам весьма странными. Дело в том, что они (программы) написаны с соблюдением соглашения об использовании имен, принятом фирмой Microsoft для целей программирования под Windows. Например, имя функции должно начинаться с глагола, за которым следует существительное. Первые символы глагола и существительного должны быть написаны с большой буквы. В большинстве случаев имена функций в книге соответствуют данному правилу.

Для имен переменных Microsoft решила применять довольно сложную систему включения ссылки на используемый тип данных. С этой целью в начало имени переменной добавляется префикс, который соответствует определенному типу данных и записывается маленькими буквами. Само имя начинается с большой буквы.

Таблица 1.1. Символы префиксов типов переменных

b

булевый (один байт)

с

символ (один байт)

С

класс

dw

длинное беззнаковое целое

f

16-разрядное битовое поле (флаги)

fn

функция

h

дескриптор

1

длинное целое

lp

длинный указатель

n

короткое целое

P

указатель

pt

длинное целое, хранящее экранные координаты

w

короткое беззнаковое целое

sz

указатель на строку, завершающуюся символом '\0'

lpsz

длинный указатель на строку, завершающуюся символом '\0'

rgb

длинное целое, хранящее значение цвета в формате RGB

1 Вертикальная полоса прокрутки .9. Элементы окна

Кнопка минимизации

Кнопка минимизации

Прежде чем продолжить, необходимо определиться с некоторыми важными терминами. На рис. 1.1 изображено стандартное окно и указаны его элементы.

Любое окно имеет рамку, которая задает границы окна и используется для масштабирования. В верхней части окна расположено несколько элементов. В верхнем левом углу находится пиктограмма системного меню (называемая также пиктограммой строки заголовка). По щелчку на ней раскрывается системное меню. Справа от этой пиктограммы находится заголовок окна. В правом верхнем углу помещаются кнопки минимизации, максимизации и закрытия. (В старых версиях Windows кнопки закрытия нет. Она появилась только в Windows 95.)

Рабочая область — это часть окна, в которой происходит работа программы. Большинство окон также содержат горизонтальную и вертикальную полосы прокрутки, предназна­ченные для перемещения документа внутри окна.

2. Каркас программы под Windows. Создание окна

2.1. Каркас программы для Windows 95

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

Минимальная программа для Windows 95 содержит две функции: WinMain и функцию окна.

Функция WinMain() должна выполнить следующие основные действия:

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

2. Зарегистрировать класс окна в Windows 95.

3. Создать окно, определяемое данным классом.

4. Отобразить это окно.

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

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

В данной программе создается стандартное окно с заголовком. Это окно также содержит системное меню, следовательно, можно минимизировать, раскрывать на весь экран, перемещать, масштабировать и закрывать. Кроме того, в окне имеются стандартные копки минимизации, максимизации и закрытия. Программа написана на C++ и может быть откомпилирована помощью любого стандартного компилятора с C/C++, который позволяет создавать программы для Windows 95.

#include <windows.h>

/* прототип функции окна */

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

char szWinName[] ="MyWin"; /* имя класса окна */

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

/*

HINSTANCE hThisInst - дескриптор идентифицирует текущий экземпляр приложения

HINSTANCE hPrevInst - дескриптор идентифицирует предыдущий экземпляр приложения

в Windows 9x = NULL

LPSTR lpszArgs - указатель на строку, содержащую аргументы командной строки

int nWinMode - содержит значение, определяющее каким образом

должно быть отражено окно программы при запуске

*/

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,

LPSTR lpszArgs, int nWinMode )

{

/* дескриптор окна */

HWND hwnd;

/* сообщение*/

MSG msg;

/* класс окна */

WNDCLASSEX wcl;

/* определение класса окна */

wcl.hInstance=hThisInst; /* дескриптор данного экземпляра */

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

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

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

wcl.cbSize = sizeof(WNDCLASSEX); /*размер струтктуры */ /* WNDCLASSEX */

wcl.hIcon = LoadIcon(NULL,IDI_APPLICATION);/* большая */ /* пикторграмма */

wcl.hIconSm = LoadIcon(NULL,IDI_WINLOGO); /* малая */ /* пиктограмма */

wcl.hCursor = LoadCursor(NULL,IDC_ARROW); /* форма курсора */

wcl.lpszMenuName = NULL; /* меню не используется */

wcl.cbClsExtra = 0; /* дополнительная информация отсутствует */

wcl.cbWndExtra = 0;

/* фон окна задается белым */

wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);

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

if(!RegisterClassEx(&wcl)) return 0;

/* Создание окна */

hwnd = CreateWindow (

szWinName, /* имя класса окна */

"Windows 95 Skeleton", /* заголовок */

WS_OVERLAPPEDWINDOW, /* стандартное окно */

CW_USEDEFAULT, /* координата Х - определяется Windows */

CW_USEDEFAULT, /* координата Y - определяется Windows */

CW_USEDEFAULT, /* ширина - определяется Windows */

CW_USEDEFAULT, /* высота - определяется Windows */

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

NULL, /* меню нет */

hThisInst, /* дескриптор данного экземпляра приложения */

NULL /* дополнительных аргументов нет */

);

/* отображение окна */

ShowWindow(hwnd,nWinMode);

/* немедленная перерисовка окна */

UpdateWindow(hwnd);

/* цикл сообщений */

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

{

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

DispatchMessage(&msg); /* возвращает управление Windows */

}

/* возвращает Windows кода возврата */

return msg.wParam;

}

/* Эта функция вызывается Windows 95, которая передает ей */

/* сообщения из очереди сообщений */

/*

HWND hwnd - дескриптор окна

UINT message - сообщение

WPARAM wParam - первый параметр сообщения

LPARAM lParam - второй параметр сообщения

*/

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam,

LPARAM lParam)

{

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

switch (message){

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

PostQuitMessage(0);

break;

default:

/* позволяет Windows обрабатывать любые сообщения

неуказанные в предыдущем случае */

return DefWindowProc(hwnd, message,wParam,lParam);

}

return 0;

}

Все программы, написанные для Windows 95, должны включать библиотечный файл WINDOWS.H. Как уже упоминалось, этот файл (вместе с рядом других вспомогательных файлов) содержит прототипы API-функций, а также определения различных типов данных, макросов и констант, используемых в Windows 95. Напри­мер, типы HWND и WNDCLASSEX определены именно в файле WINDOWS.H.

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

Программа начинает выполнение с вызова функции WinMain(), которой переда­ется четыре параметра. Параметры hThisInst и hPrevInst являются дескрипторами. Первый из них идентифицирует текущий экземпляр приложения. Помните, что Windows является многозадачной операционной системой, в которой возможно одновременное выполнение нескольких экземпляров одной и той же программы. Параметр hPrevInst всегда равен NULL. (В Windows 3.1 этот параметр содержал бы ненулевое значение, если бы в данный момент выполнялись другие экземпляры программы. Однако в Windows 95 это больше не используется.) Параметр IpszArgs является указателем на строку, содержащую аргументы командной строки, передан­ные приложению при запуске. Параметр nWinMode содержит значение, определяю­щее, каким образом должно быть отображено окно программы при запуске.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]