МАКЕ1ШЕ501ЖСЕ(РТ_МЕМи)); НО.0ВА1_ НС - 1_с^е$оигсе( ШИ^гс):.

МЕМиТЕМР1_АТЕ* рМепи - (МЕШТЕМР1_АТЕ*) ЮскЛеБоигсеСНб); НМЕШ пМепи - ЬоайМепиГгкИгесирМепи); Проверку работоспособности такого решения можно выполнить самостоятельно в качестве упражнения.

Дочерние окна Если в приложении создано окно с дескриптором hWnd, то разработчик может создавать дочерние окна. Дочернее окно нельзя переместить за границы родительского окна, а при перемещении родительского все дочерние окна движутся по экрану вместе с ним.

Кроме общего механизма взаимодействия окон на базе функций PostMessage( ) и SendMessage( ), в системе заложены дополнительные средства, связывающие родительское и порожденные окна.

Дочернее окно создается при помощи все той же функции CreateWi ndow( ). Нужно только указать в параметрах дескриптор родительского окна и дополнительный флаг WS_CHILD. Этот флаг можно объединять с другими флагами (кроме WS_P0PUP). В приведенном ниже примере дочернее окно будет похожим на основное. В нем будут область заголовка, системные кнопки и рамка. Параметр, в котором окну передается дескриптор меню, в дочерних окнах занят назначенной программистом константой, в которой хранится номер окна, позволяющий основному окну различать дочерние окна. Чтобы отличать номер окна от дескриптора, его называют идентификатором окна. В листинге 6.1 приведен пример кода, создающего дочернее окно.

Листинг 6.1

HWND Chid - CreateWindow( ClassName. "Дочернее окно". WSJISIBLE I WS_CHILD | WS_0VERLAPPEDWIND0W, xO. yO. DX. DY.

hWnd. //Дескриптор родительского окна

HMENU(9). //Идентификатор создаваемого дочернего окна

hlnstance. NULL
);

Данному окну присвоен идентификатор 9, который переопределен в HMENU(9), чтобы программа прошла синтаксический контроль.

Чаще всего дочерние окна имеют только рамку, которая создается при помощи комбинации флагов WS_VI SI BLE | WS_CHILD | WS_B0RDER, или создаются невидимыми.

Дескриптор дочернего окна можно получить по его идентификатору и дескриптору родительского окна. Для текущего примера это может сделать вызов функции GetDl gltem(hWnd .9). Но можно также использовать координаты точки в рабочей области родительского окна, которые передаются в качестве параметров функции HWND Chi 1dWindowFromPoint( HWND.POINT).


⇐ Предыдущая| |Следующая ⇒