Выбери формат для чтения
Загружаем конспект в формате pptx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Инф ормационны е
технологии
Лекция №7
План лекции
• Оконная процедура
• Создание проекта Win32
• Обработка сообщений
• Создание дочерних окон
1
Оконная процедура (блок-схема)
НАЧАЛО
uMsg
WM_CREATE
WM_PAINT
WM_DESTROY
DefWindowProc
Инициализация
Вывод графики
PosrQuitMessage
2
Оконная процедура (исходны й код)
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
3
Создание проект а
4
Создание проект а
(продолж ение)
5
Создание проект а
(продолж ение)
6
Сообщение WM_CREATE
WM_CREATE (0x0001)
wParam – не используется
lParam – указатель на структуру CREATESTRUCT
typedef struct tagCREATESTRUCT {
LPVOID
lpCreateParams;
HINSTANCE hInstance;
HMENU
hMenu;
HWND
hwndParent;
int
cy;
int
cx;
int
y;
int
x;
LONG
style;
LPCTSTR
lpszName;
LPCTSTR
lpszClass;
DWORD
dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
CREATESTRUCT *cs;
cs = (CREATESTRUCT *)lParam;
uWidth = cs->cx;
7
Класс BUTTON
• Push Buttons
BS_PUSHBUTTON
BS_DEFPUSHBUTTON
• Check Boxes
BS_CHECKBOX
BS_AUTOCHECKBOX
BS_3STATE
BS_AUTO3STATE
• Radio Buttons
BS_RADIOBUTTON
BS_AUTORADIOBUTTON
• Group Boxes
BS_GROUPBOX
CreateWindow("BUTTON",
"BS_PUSHBUTTON",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
10, 10, 250, 30,
hWnd, IDB_PUSHBUTTON,
ID
g_hInstance, NULL);
кнопки
Стиль
кнопки
8
Класс EDIT
CreateWindow("EDIT",
"Текст",
WS_VISIBLE | WS_CHILD,
10, 50, 250, 30,
hWnd, IDE_EDIT,
g_hInstance, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE,
"EDIT",
"Другой текст",
WS_VISIBLE | WS_CHILD,
10, 90, 250, 30,
hWnd, (HMENU)NULL,
g_hInstance, NULL);
/*
* Edit Control Styles
*/
#define ES_LEFT
0x0000L
#define ES_CENTER
0x0001L
#define ES_RIGHT
0x0002L
#define ES_MULTILINE
0x0004L
#define ES_UPPERCASE
0x0008L
#define ES_LOWERCASE
0x0010L
#define ES_PASSWORD
0x0020L
#define ES_AUTOVSCROLL
0x0040L
#define ES_AUTOHSCROLL
0x0080L
#define ES_NOHIDESEL
0x0100L
#define ES_OEMCONVERT
0x0400L
#define ES_READONLY
0x0800L
#define ES_WANTRETURN
0x1000L
#if(WINVER >= 0x0400)
#define ES_NUMBER
0x2000L
#endif /* WINVER >= 0x0400 */
9
Взаимодейст вие с дочерними
окнами
• Дочерним окнам можно посылать сообщения (нужен дескриптор)
• Дочерне окна посылают сообщение WM_COMMAND (распознаются по ID)
LRESULT WINAPI SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
SendMessage(hButton, WM_SETFONT, GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
BOOL WINAPI SetWindowText(
HWND hWnd,
LPCTSTR lpString
);
int WINAPI GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount
);
BOOL WINAPI MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
10
Сообщение WM_COMMAND
#define WM_COMMAND
0x0111
Message
Source
wParam (high
word)
Menu
wParam (low word) lParam
Menu identifier
(IDM_*)
Accelerator 1
Accelerator
identifier (IDM_*)
Control
Control identifier
Handle to the
control
window
Control-defined
notification code
11