Концепция приложения под Windows. Windows API. Венгерская нотация. Структура программы. WinMain. Оконная процедура.
Выбери формат для чтения
Загружаем конспект в формате pptx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Инф ормационны е
технологии
Лекция №6
План лекции
• Концепция приложения под Windows
• Windows API
• Венгерская нотация
• Структура программы
• WinMain
• Оконная процедура
1
Консольное прилож ение и прилож ение Windows
2
Windows API
https://msdn.microsoft.com/library/vstudio/cc433218
• KERNEL32.DLL
Базовая функциональность
• GDI32.DLL
(Graphics Device Interface)
• USER32.DLL
Пользовательский интерфейс (стандартные
элементы управления)
• COMCTL32.DLL
Общие диалоговые окна и дополнительные
элементы управления
3
Венгерская нотация
Преф и
Сокращение от
кс
Смы сл
Пример
s
string
строка
sClientName
sz
zero-terminated
string
строка, ограниченная нулевым
символом
szClientName
n, i
int
целочисленная переменная
nSize, iSize
l
long
длинное целое
lAmount
b
boolean
булева переменная
bIsEmpty
a
array
массив
aDimensions
t, dt
time, datetime
время, дата и время
tDelivery, dtDelivery
p
pointer
указатель
pBox
lp
long pointer
дальний указатель
lpBox
r
reference
ссылка
rBoxes
h
handle
дескриптор
hWindow
m_
member
переменная-член
m_sAddress
g_
global
глобальная переменная
g_nSpeed
C
TПреф и
кс
I
vi
class
класс
CString
type
Сок ращение от
interface
index
void
TObject
Пример
IDispatch
int
ix; Array[ix] = 10;
vReserved
size_t nFound = 0;
d
delta
тип
Смы сл
интерфейс
Индекс
отсутствие
типа
Разница между значениями
n
number
Количество
int a, b; ... dc = b - a;
4
Ст рукт ура программы Windows
• WinMain
•
•
•
•
Создается и регистрируется класс окна.
Создается окно на базе класса кона.
Отображается окно.
Организуется цикл обработки сообщений.
• Оконная процедура
• Обрабатываются сообщения.
5
WinMain (блок-схема)
НАЧАЛО
Создаем класс окна
Регистрируем класс
окна
Создаем окно
Показываем окно
Обновляем окно
Получаем
сообщение
КОНЕЦ
Переводим сообщение
Передаем сообщение
6
WinMain (исходный код)
#include
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstanse, LPSTR lpCmdLine, int nCmdShow)
{
PSTR szClassName = "SimpleApplication";
WNDCLASS wc;
HWND hWnd;
MSG msg;
// Создаем класс окна (инициализируем структуру).
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
// Регистрируем класс окна.
RegisterClass(&wc);
7
WinMain (исходный код, продолжение)
// Создаем окно.
hWnd = CreateWindow(szClassName, // Класс окна
"Simple Application", // Заголовок
WS_OVERLAPPEDWINDOW, // Стиль
CW_USEDEFAULT,
// Координата X верхнего левого
угла
CW_USEDEFAULT,
// Координата Y верхнего левого
угла
CW_USEDEFAULT,
// Ширина окна
CW_USEDEFAULT,
// Высота окна
NULL,
// Дескриптор родительского окна
NULL,
// Дескриптор меню
hInstance,
// Дескриптор модуля экземпляра
окна
NULL);
// lParam
ShowWindow(hWnd, nCmdShow); // Показываем окно
UpdateWindow(hWnd);
// Обновляем окно
// Цикл обработки сообщений.
while (GetMessage(&msg, (HWND)NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
8
Сообщения
typedef struct tagMSG {
HWND
hwnd;
// Дескриптор окна
UINT
message; // Идентификатор сообщения
WPARAM wParam; // Дополнительный параметр (зависит от
сообщения)
LPARAM lParam; // Дополнительный параметр (зависит от
сообщения)
DWORD time;
// Время посылки сообщения
POINT pt;
// Координаты указателя мыши
} MSG, *PMSG, *LPMSG;
WM_CREATE (0x0001)
wParam – не используется
lParam – указатель на структуру CREATESTRUCT
WM_DESTROY (0x0002)
wParam – не используется
lParam – не используется
WM_MOVE (0x0003)
wParam – не используется
lParam – координаты окна
int xPos, yPos;
xPos = LOWORD(lParam);
//
горизонтальное положение
yPos = HIWORD(lParam);
// вертикальное
положение
BOOL WINAPI GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
9