Как было указано, при изменении размеров родительского окна в дочернее поступает сообщение WM_PAINT, по которому в переменной R формируются размеры родительского окна и при помощи функции MoveWi ndow( hWndC. R. 1 eft. R. bottom-i Hei ght. R. right. R. bottom- i Hei ght. 1) дочернему окну выделяется нижняя часть родительского окна.
При изменении основного окна параметры этой функции указывают координаты углов окна в системе экрана, а при изменении дочернего позволяют задавать координаты в рабочей области родительского окна. Обычно обработка сообщения WM_PAINT начинается с вызова функции Begi nPai nt(). В данном случае это приведет к ошибке, так как в контекст ps. hdc не попадет информация об изменении функцией MoveWi ndow() размеров и положения дочернего окна.
Создание дочернего окна с дескриптором Chid (глобальная переменная объявлена выше) оформлено отдельной функцией, код которой приведен в листинге 6.9.
Листинг 6.9
B00L CreateChildCHWND hWnd) {static WNDCLASS wc; if(Chid) {
DestroyWindow(Chld);
UnregisterClass("ReadStr".GetModuleHandle(NULD);
//Если класс не удалить, то возникнет ошибка при новой регистрации
//класса с тем же именем.
}
Графические элементы управления
wc.hlnstance - GetModulеНапсПе(NULL); //Задаем только ненулевые поля wc. wc.hbrBackground - (HBRUSH)(C0L0R_BTNFACE+1);
//Поскольку при регистрации оконного класса задается цвет COLOR_BTNFACE.
//отличный от фонового цвета основного окна, то дочернее окно будет
//отображено в виде полосы темного цвета.
wc.lpfnWndProc - ChldWndProc;
wc.lpszClassName - "ReadStr";
if (!RegisterClass(&wc)) return 0;
Chid-CreateWindow("ReadStr". "". WS_CHILD|WS_VISIBLE. 0. 0. 10. 10. hWnd. HMENU(NumC). GetModuleHandle(NULL). NULL):
SetFocus(Chld);. return (int)Chld: }
Фокус ввода переведен на дочернее окно, поэтому сообщения WM_CHAR будут обрабатываться оконной процедурой окна Chid.
При создании окна использовались условные размеры. По первому же сообщению WM_P0INT оконная процедура ChldWndProc растянет дочернее окно до горизонтальной серой полосы высотой iHeight пикселов в нижней части основного окна.