Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОСОБИЕ СозданиеWindowsПриложений.doc
Скачиваний:
21
Добавлен:
01.03.2016
Размер:
3.35 Mб
Скачать
  1. Типовой шаблон (каркас) windows-приложения (тшп)

    1. Изучение свойств типового шаблона

      1. Изучить листинг типового шаблона

Ниже приведено описание структуры Windows-приложения с типовым минимальным набором средств, включая средства графического интерфейса (окно, системные кнопки и системное меню).

Текст, похожий на приведенный здесь, можно получить автоматически, используя мастер Win32 Application (Hello). Однако он будет отличаться от приведенного здесь (об отличиях см. ШаблонHello).

#include <windows.h> //указания на более чем 30 отдельных хедеров с описаниями > 2000

//функций, 3000 констант и др. описания Windows

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

char szWindowClass [] = "myWindowClass";

//===============================

// ГЛАВНАЯ ФУНКЦИЯ

int WINAPI WinMain (HINSTANCE hInst, //идентификатор текущего экземпляра приложения

HINSTANCE hPreInst, //всегда NULL

LPSTR lpszCmdLine, //указатель на командную строку приложения

int nCmdShow) //способ изображения окна при первом выводе

{

// TODO: Place code here:

// ……………………

HWND hWnd; //дескриптор, хендл, идентификатор окна

MSG lpMsg; //структура для хранения параметров сообщений

// Initialize global strings

WNDCLASS wcApp; //структура для хранения параметров класса (стиля) окна

wcApp.lpszClassName = szWindowClass; //имя класса окна

wcApp.hInstance = hInst; //дескриптор этого приложения., регистрирующий класс окна

wcApp.lpfnWndProc = WndProc; //указатель на функцию-обработчик сообщений окна

wcApp.hCursor = LoadCursor(NULL, IDC_ARROW); //тип курсора окна (стрелка)

wcApp.hIcon = 0; //вид пиктограммы при выводе окна в свернутом виде (здесь без)

wcApp.lpszMenuName = 0; //строка – имя ресурса меню (здесь без меню)

wcApp.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); // цвет для фона

//wcApp.hbrBackground = GetStockObject(WHITE_BRUSH); // кисть по умолчанию

// см. [У. Мюррей, с.90]. CS_DBCLKS, CS_KEYCVTWINDOW !

wcApp.style = CS_HREDRAW|CS_VREDRAW; //перерисовывать окно при resize

wcApp.cbClsExtra = 0; //число доп. байт, выделяемых структуре WNDCLASS

wcApp.cbWndExtra = 0; //число доп. байт для всех доп. структур

if ( ! RegisterClass (&wcApp)) //регистрация окна, описанного в структуре по адресу &wcApp

return 0;

// Perform application initialization: создает окно и возвращает его идентификатор hWnd

hWnd = CreateWindow (szWindowClass, //имя зарегистрированного класса окна

"A Template", //заголовок (название) окна

WS_OVERLAPPEDWINDOW,//стиль окна (перекрыв.&сист.меню&кнопки maxmin)

CW_USEDEFAULT, //х – начальное положение окна по оси Х

CW_USEDEFAULT, //y – начальное положение окна по оси Y

CW_USEDEFAULT, //ширина окна в ед. устройства

CW_USEDEFAULT, //высота окна в ед. устройства

(HWND)NULL, //указатель на родит. окно (у перекрывающегося окна его нет)

(HMENU) NULL, //зависит от стиля окна – указывает его меню

hInst, //определяет копию модуля, связанного с окном (кто создал)

NULL); //адрес доп. информации, нужной для создания окна

ShowWindow (hWnd, nCmdShow); //вывод окна

UpdateWindow (hWnd); //перерисовка окна, т.к. генерируется сообщение WM_PAINT

// Main message loop: копирует очередное сообщение в структуру по адресу &lpMsg

//т.е. передает его в основной блок программы без фильтрации – 0,0

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

{

TranslateMessage (&lpMsg); //если нужно - преобразует виртуальн. клавиши в символы

DispatchMessage (&lpMsg); //передача сообщения соответствующей функции окна

}

return (lpMsg.wParam);

}

//=====================================

// ФУНКЦИЯ ГЛАВНОГО ОКНА (функция окна = оконная функция = функция обратного вызова).

// Имя функции (здесь WndProc) выбирает пользователь.

// PURPOSE: Processes messages for the main window:

// WM_COMMAND - process the application menu,

// WM_PAINT - paint the main window,

// WM_DESTROY - post a quit message and return.

LRESULT CALLBACK WndProc (HWND hWnd, //дескриптор окна, получившего сообщение

UINT messg, //сообщение для обработки

WPARAM wParam,

LPARAM lParam)

{

HDC hdc; //дескриптор контекста изображения (устройства для этого окна)

PAINTSTRUCT ps; //структура, хранящая информацию о клиентской области окна

switch (messg)

{

case WM_PAINT: //первый раз это сообщение вызывается функцией UpdateWindow()

//подготовка окна hWnd к выводу информации, получение дескриптора устройства hdc

hdc = BeginPaint (hWnd, &ps);

//------Начало фрагмента пользователя

// ……………………………….

//------Конец фрагмента пользователя

ValidateRect (hWnd,NULL); //перерисовка не нужна

EndPaint (hWnd, &ps); //завершение отрисовки в окне и освобождение hdc

break;

case WM_DESTROY: //если команда ГМ-Выход

PostQuitMessage (0);

break;

default: //очистка очереди от необработанных сообщений

return ( DefWindowProc (hWnd, messg, wParam, lParam));

}

return 0;

}