МАКЕ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).