- •Методические указания
- •Оглавление
- •Теоретический материал
- •Введение
- •Типы данных Windows. Типы указателей Windows. Использование памяти
- •Венгерская нотация. Префиксы данных
- •Общая структура Windows-приложений
- •Описание класса (стиля) окна. Структура wndclass
- •Создание (визуализация) окна
- •Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений
- •Ресурсы Windows-приложений
- •Встроенные редакторы ресурсов
- •Средства организации вывода данных
- •Средства организации ввода данных
- •Вывод растровых изображений в Windows-приложениях
- •Автоматические шаблоны (каркасы) windows-приложений (тип empty, simple)
- •Создать шаблон Windows-приложения (тип Empty) и изучить его свойства
- •Модифицировать шаблон
- •Создать шаблон Windows-приложения (тип Simple) и изучить его свойства
- •Типовой шаблон (каркас) windows-приложения (тшп)
- •Изучение свойств типового шаблона
- •Изучить листинг типового шаблона
- •Воспроизвести типовой шаблон
- •Изучить свойства типового шаблона
- •Модификация типового шаблона
- •Изменить интерфейс типового шаблона
- •Добавить строку приветствия в типовой шаблон
- •Использование типового шаблона
- •Организовать вывод данных с применением функций
- •Добавить ресурс - меню
- •Организовать ввод данных с применением меню и пользовательского диалогового окна
- •Автоматический шаблон (каркас) windows-приложения (тип hello)
- •Изучение свойств шаблона (тип Hello)
- •Создать шаблон Windows-приложения (тип Hello)
- •Изучить ресурсы шаблона
- •Изучить свойства шаблона
- •Модификация шаблона (тип Hello)
- •Получить типовой шаблон приложения (тшп) из шаблона (тип Hello)
- •Организовать ввод-вывод числовых данных с применением пользовательского диалогового окна
- •Индивидуальные задания
-
Типовой шаблон (каркас) windows-приложения (тшп)
-
Изучение свойств типового шаблона
-
Изучить листинг типового шаблона
Ниже приведено описание структуры 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;
}
