
- •Методические указания
- •Оглавление
- •Теоретический материал
- •Введение
- •Типы данных Windows. Типы указателей Windows. Использование памяти
- •Венгерская нотация. Префиксы данных
- •Общая структура Windows-приложений
- •Описание класса (стиля) окна. Структура wndclass
- •Создание (визуализация) окна
- •Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений
- •Ресурсы Windows-приложений
- •Встроенные редакторы ресурсов
- •Средства организации вывода данных
- •Средства организации ввода данных
- •Вывод растровых изображений в Windows-приложениях
- •Автоматические шаблоны (каркасы) windows-приложений (тип empty, simple)
- •Создать шаблон Windows-приложения (тип Empty) и изучить его свойства
- •Модифицировать шаблон
- •Создать шаблон Windows-приложения (тип Simple) и изучить его свойства
- •Типовой шаблон (каркас) windows-приложения (тшп)
- •Изучение свойств типового шаблона
- •Изучить листинг типового шаблона
- •Воспроизвести типовой шаблон
- •Изучить свойства типового шаблона
- •Модификация типового шаблона
- •Изменить интерфейс типового шаблона
- •Добавить строку приветствия в типовой шаблон
- •Использование типового шаблона
- •Организовать вывод данных с применением функций
- •Добавить ресурс - меню
- •Организовать ввод данных с применением меню и пользовательского диалогового окна
- •Автоматический шаблон (каркас) windows-приложения (тип hello)
- •Изучение свойств шаблона (тип Hello)
- •Создать шаблон Windows-приложения (тип Hello)
- •Изучить ресурсы шаблона
- •Изучить свойства шаблона
- •Модификация шаблона (тип Hello)
- •Получить типовой шаблон приложения (тшп) из шаблона (тип Hello)
- •Организовать ввод-вывод числовых данных с применением пользовательского диалогового окна
- •Индивидуальные задания
-
Общая структура Windows-приложений
Напоминает структуру консольного приложения. Роль функции main() исполняет функция WinMain(…). Структура приложения:
<Команды_препроцессора>
<Прототип_функции_главного_окна_WndProc(…)>
[ <Прототипы_прикладных_функций> ]
<Описания_глобальных_объектов>
<Описание_главной_функции_WinMain(…)>
<Описание_функции_главного_окна_WndProc(…)>
[ <Описание_прикладной_функции>
………………..
<Описание_прикладной_функции> ] .
Минимальный состав приложения предполагает наличие двух обязательных функций. Текст приложения приведен ниже.
//======================================================
// тип - WIN32 APPLICATION (Windows Application)
//======================================================
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szWindowClass [] = "myWindowClass";
//=====================================
int WINAPI WinMain (HINSTANCE hInst,
HINSTANCE hPreInst,
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);
wcApp.style = CS_HREDRAW | CS_VREDRAW;
wcApp.cbClsExtra = 0;
wcApp.cbWndExtra = 0;
if ( ! RegisterClass (&wcApp))
return 0;
// Perform application initialization:
hWnd = CreateWindow (szWindowClass, "A Template",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND)NULL,
(HMENU) NULL,
hInst, NULL);
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
// Main message loop:
while (GetMessage (&lpMsg, NULL, 0, 0))
{
TranslateMessage (&lpMsg);
DispatchMessage (&lpMsg);
}
return (lpMsg.wParam);
}
//===========================================
LRESULT CALLBACK WndProc (HWND hWnd,
UINT messg,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (messg)
{
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
//------Начало фрагмента пользователя
// …………………….
//------Конец фрагмента пользователя
ValidateRect (hWnd,NULL);
EndPaint (hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return ( DefWindowProc (hWnd, messg, wParam, lParam));
}
return 0;
}