Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_3_slaydy_2012.doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
376.32 Кб
Скачать

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]