
- •Int cbClsExtra;
- •Int cbWndExtra;
- •Создание и отображение окна
- •Int nWidth,
- •Int nHeight,
- •Оконная процедура
- •Int winapi MessageBox(
- •6) Дочернее окно может по своему дескриптору Chld получить дескриптор родительского окна при помощи функции:
- •8) При уничтожении родительского окна сообщение wm_destroy также рассылается всем дочерним окнам.
- •Параметры:
- •10) При уничтожении дочернего окна функцией DestroyWindow() родительскому окну тоже передается сообщение wm_destroy.
- •4) После того, как дочернее окно было создано, оно может посылать сообщение wm_command, уведомляющие pодительское окно об изменении своего состояния.
- •7) В программе функция InitStr() объявлена следующим образом:
- •Void InitStr(hwnd hWnd, char *s, int Max, char Sy);
- •Void InitStr(hwnd hWnd,char *s,int Max,char Sy)
- •11) Код функции обработки пароля приведён в листинге:
- •If(IsIconic(hwnd)) ShowWindow(hwnd,sw_restore);
- •If (!RegClass(WndProc,szMainClass,color_desktop))
Int winapi MessageBox(
HWND hwnd, // дескриптор родительского окна
LPCTSTR lpText, // адрес текста сообщения
LPCTSTR lpCaption, // адрес заголовка окна сообщения
UINT uType); // стиль окна сообщения
Если hwnd=NULL, то окно сообщения не имеет родительского окна. При lpCaption=NULL, то в заголовке по умолчанию выводится строка «Ошибка».
Параметр uType задаётся в виде комбинации флагов, которые определяют содержание и поведение окна сообщения:
По-умолчанию активна первая кнопка.
С помощью следующих флагов можно назначить одну из кнопок активной по умолчанию:
Существуют следующие имена констант, которые функция MessageBox возвращает:
8) изменить подсветку окна или его пиктограммы можно с помощью функции FlashWindow, которая за один вызов один раз изменяет подсветку указанного окна:
BOOL FlashWindow(
HWND hwnd, // дескриптор подсвечиваемого окна
BOOL bInvert); // параметр подсветки
Если параметр bInvert=TRUE, окно меняет подсветку. Если же bInvert=FALSE, окно возвращается в исходное состояние.
При подсветке неактивное окно может принять внешний вид активного окна, но не получить фокус ввода.
Если окно было активно до вызова FlashWindow, то возвращается ненулевое значение. Если окно не было активно, возвращается ноль.
Пример 1: После нажатия левой клавиши мыши над окном hwnd 9 раз изменить подсветку неактивного окна OwnedHwnd:
case WM_LBUTTONDOWN:
{ FlashWindow(OwnedHwnd,TRUE);
for (int i=0;i<9;i++)
{ for (long j=0; j<(1Е+7); j++);
FlashWindow(OwnedHwnd,TRUE)
}
return 0;
}
Дочерние окна. Основные положения
1) Дочернее окно создается при помощи функции CreateWindow().
2) В качестве восьмого параметра функции CreateWindow() необходимо указать дескриптор родительского окна;
3) При определении стиля дочернего окна в третьем параметре функции CreateWindow() необходимо указать дополнительный флаг WS_CHILD. Этот флаг можно объединять с другими флагами (кроме WS_PОPUP);
4) При создании дочернего окна, девятый параметр функции CreateWindow(), в котором окну передается дескриптор меню, должен определять константу, в которой хранится номер дочернего окна и которая позволяет основному окну различать дочерние окна.
Пример кода, создающего дочернее окно.
HWND Chid = CreateWindow(
ClassName, "Дочернее окно",
WSVISIBLE | WS_CHILD | WS_OVERLAPPEDWINDOW,
x0, y0, DX, DY,
hWnd, // Дескриптор родительского окна
HMENU(9), // Идентификатор создаваемого дочернего окна
hInstance,
NULL);
Данному окну присвоен идентификатор 9, который переопределен в HMENU(9), чтобы программа прошла синтаксический контроль.
5) Дескриптор дочернего окна можно получить по его идентификатору и дескриптору родительского окна. Для текущего примера это можно сделать с помощью функции:
GetDlgItem(hWnd, 9).
6) Дочернее окно может по своему дескриптору Chld получить дескриптор родительского окна при помощи функции:
GetParent(Chld).
7) Если в родительское окно поступает сообщение WM_PAINT и недействительная область пересекается с дочерним окном, это сообщение будет передано также и дочернему окну. Это приводит к тому, что выполнение функции InvalidateRect(hWnd, NULL, TRUE) вызовет поступление сообщения WM_PAINT во все дочерние окна.
Функция InvalidateRect добавляет прямоугольник к обновляемому региону заданного окна. Обновляемый регион представляет часть рабочей области окна, которая должна быть перерисована.
BOOL InvalidateRect
(
HWND hWnd, // указатель на окно
CONST RECT *lpRect, // прямоугольник перерисовки
BOOL bErase // режим перерисовки
);
Если первый параметр NULL, то будут перерисованы все окна. Если второй параметр NULL, то будет перерисована вся область окна. Последний параметр указывает на действия с фоном, если TRUE, то фон будет стерт, иначе оставлен. При удачном выполнении этой функции результат отличен от нуля.
Указанные области перерисовки накапливаются, пока не будет получено сообщение WM_PAINT или пока эта функция не будет отменена противоположной функцией ValidateRect(). При установке нескольких областей производится их объединение и обработка одним WM_PAINT.
Типичная обработка сообщения в главной функции окна:
case WM_PAINT:
hDC=BeginPaint(hWnd, &ps);
/* операции вывода */
EndPaint(hWnd, &ps);
break;