Создание дочернего окна

Для создания дочернего окна MDI, приложение можно вызвать функцию CreateMDIWindow или отправить сообщение WM_MDICREATE в клиента MDI. (Приложение может использовать функцию CreateWindowEx с WS_EX_MDICHILD стилем для создания дочерних MDI-окон.) Однопотокового приложения MDI можно использовать любой метод для создания дочернего окна. Поток в многопоточном приложении MDI необходимо использовать функцию CreateMDIWindow или CreateWindowEx для создания дочернего окна в потоке.

Параметр lParam сообщения WM_MDICREATE — далеко указатель на структуру MDICREATESTRUCT . В состав входят четыре элементы измерения: x и y, которые указывают горизонтальное и вертикальное положение окна и cx и cy, которые указывают горизонтальное и вертикальное экстенты окна. Любой из этих элементов могут быть отнесены явно приложением, или они могут быть установлены для CW_USEDEFAULT, в котором случае система выбирает позицию, размер или оба, по словам каскадных алгоритма. В любом случае все четыре члена должны быть инициализированы. Multipad использует CW_USEDEFAULT для всех измерений.

Последний член MDICREATESTRUCT структуры является членом стиля , которые могут содержать битов стиля для окна. Для создания дочернего окна MDI, которое может иметь любую комбинацию стилей окна, укажите стиль окна MDIS_ALLCHILDSTYLES. Когда этот стиль не задан, дочернее окно MDI имеет WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL и WS_VSCROLL стилей как параметры по умолчанию.

Multipad создает свою дочернюю MDI-форму windows, используя его локально определенные функции AddFile (расположен в исходном файле MPFILE.C). функция AddFile устанавливает название дочернего окна, назначая член szTitle структуры MDICREATESTRUCT окна либо имя редактируемого файла, или "Безымянное". Член szClass присваивается имя класс дочернего окна MDI, зарегистрирована в Multipad в InitializeApplication функции. HOwner члена имеет значение дескриптор экземпляра приложения.

В следующем примере показана функция AddFile в Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName; 
{HWND hwnd; 
    Sz CHAR [160]; 
    MDICREATESTRUCT МКН; 
 
    Если (! pName) {/ / Если параметр pName равно NULL, загрузить «Безымянное» / / строка из STRINGTABLE ресурса и установите szTitle / / член MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } else / / название окна с полного пути и имени файла, / / путем вызова функции OpenFile с / / OF_PARSE флаг, который вызывается перед AddFile(). 
 
        MCS.szTitle = of.szPathName; 
 
    MCS.szClass = szChild; 
    MCS.hOwner = hInst; 
 
    / / Используется размер по умолчанию для дочернего окна. 
 
    MCS.x = mcs.cx = CW_USEDEFAULT; 
    MCS.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Дают дочернее окно стиль по умолчанию. StyleDefault / / переменная определена в MULTIPAD.С. mcs.style = styleDefault; 
 
    / / Рассказать в MDI клиента для создания дочернего окна. 
 
    HWND = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (длинный) (LPMDICREATESTRUCT) amp mcs); 
 
    / / Если файл найден, читать его содержимое в ребенка / / клиентской области окна. 
 
    Если (pName) {if (!Метод LoadFile (hwnd, pName)) {/ / не может загрузить файл, закройте окно. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, hwnd (DWORD), 0 L); 
        }} вернуть hwnd; 
} 
 

Указатель, передаваемый в параметре lParam сообщения WM_MDICREATE передается функции CreateWindow и появляется как первый элемент в структуре CREATESTRUCT , принятый в сообщений WM_CREATE . В Multipad дочернее окно инициализирует себя во время обработки путем инициализации переменных документа в его дополнительных данных и создания управления edit дочернее окно сообщений WM_CREATE.

Index