Створення дочірнього вікна

Створити з вікна 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). The AddFile функція встановлює назву дочірнього вікна шляхом призначення у вікні MDICREATESTRUCT структури, член szTitle або ім'я файлу, який редагується або «Без імені». Член szClass встановлений на ім'я MDI дитини клас вікна зареєстровано в Multipad в InitializeApplication функції. Член hOwner встановлено дескриптор екземпляра програми.

Наступний приклад показує функції AddFile в Multipad.

HWND &APIENTRY AddFile(pName) ЧАР * pName; 
{HWND hwnd; 
    ЧАР sz [160]; 
    MDICREATESTRUCT mcs; 
 
    Якщо (! pName) {/ / Якщо параметр pName є NULL, завантажити «Без імені» / / рядок з ресурсу STRINGTABLE і встановити на szTitle / / член MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } інше / / назва вікна з повний шлях та ім'я файлу, / / отримана шляхом виклику функції 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.C. mcs.style = styleDefault; 
 
    / / Розповісти вікна MDI клієнт для створення дочірнього вікна. 
 
    hwnd = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (довгий LONG) (LPMDICREATESTRUCT) amp mcs); 
 
    / / Якщо знайти файл, читати її вміст до дитини / / клієнтської області вікна. 
 
    Якщо (pName) {Якщо (!LoadFile (hwnd, pName)) {/ / не вдається завантажити файл; закрити вікно. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, hwnd (DWORD), 0-L); 
        }} повернення hwnd; 
} 

 

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

Index