Tworzenie okna podrzędnego

Aby utworzyć okno potomne MDI, aplikacja może albo wywołania funkcji CreateMDIWindow lub wysłać wiadomość WM_MDICREATE aby oknie klienta MDI. (Aplikacji można użyć funkcji funkcji CreateWindowEx w stylu WS_EX_MDICHILD do tworzenia okien podrzędnych MDI.) Stosowania MDI jednowątkowych można użyć albo metody tworzenia okna podrzędnego. Aby utworzyć okna podrzędnego w innym wątku wątku wielowątkowych aplikacji MDI trzeba użyć funkcji CreateMDIWindow lub funkcji CreateWindowEx.

Parametr fikcyjnymi wiadomości WM_MDICREATE jest daleko wskaźnika do struktury MDICREATESTRUCT . Struktura obejmuje cztery elementy członkowskie wymiaru: x i y, które wskazują położenie poziome i pionowe okna, cx i cy, które wskazują zakresów poziome i pionowe okna. Któregokolwiek z tych członków może jawnie przydzielony przez aplikację, lub może być ustawiony na CW_USEDEFAULT, w którego przypadku system wybiera położenia, rozmiaru lub oba te elementy w zgodnie z algorytmem kaskadowych. W każdym przypadku wszyscy czterej członkowie musi być zainicjowany. Multipad używa CW_USEDEFAULT dla wszystkich wymiarów.

Ostatni członek struktury MDICREATESTRUCT jest członek styl , który może zawierać bitów styl w oknie. Aby utworzyć okno potomne MDI, która może mieć dowolną kombinację style okien, określ styl okno MDIS_ALLCHILDSTYLES. Gdy styl ten nie jest określona, okno potomne MDI ma stylów WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL i WS_VSCROLL jako domyślne ustawienia.

Multipad tworzy jego podrzędnych MDI systemu windows za pomocą jego zdefiniowane lokalnie funkcji AddFile (znajdujące się w pliku źródłowym MPFILE.C). The AddFile funkcja Ustawia tytuł okna podrzędnego przez przypisanie członka szTitle struktury MDICREATESTRUCT okna albo nazwę edytowanego pliku lub „bez tytułu." Państwa szClass jest ustawiona na nazwę klasy okno podrzędnych MDI zarejestrowane w Multipad na InitializeApplication funkcji. Element hOwner jest ustawiona na uchwyt wystąpienia aplikacji.

W poniższym przykładzie pokazano funkcję AddFile w Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName; 
{HWND hwnd; 
    Sz CHAR [160]; 
    MDICREATESTRUCT mcs; 
 
    Jeżeli (! pName) {/ / Jeżeli parametr pName jest NULL, obciążenia "Untitled" / / ciąg znaków z zasobów STRINGTABLE i ustaw szTitle / / członkiem MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } else / / tytuł okna z pełną ścieżkę i nazwę pliku, / / uzyskane przez wywołanie funkcji OpenFile z / / flagę OF_PARSE, która jest wywoływana przed AddFile(). 
 
        MCS.szTitle = of.szPathName; 
 
    MCS.szClass = szChild; 
    MCS.hOwner = hInst; 
 
    / / Użyj domyślnego rozmiaru okna podrzędnego. 
 
    MCS.x = mcs.cx = CW_USEDEFAULT; 
    MCS.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Nadaj okno podrzędne styl domyolny. StyleDefault / / zmienna została zdefiniowana w MULTIPAD.C. mcs.style = styleDefault; 
 
    / / Tell okna klienta MDI, aby utworzyć okna podrzędnego. 
 
    hwnd = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (DŁUGA) (LPMDICREATESTRUCT) i; mcs); 
 
    / / Jeżeli plik zostanie znaleziony, przeczytać jego zawartość do dziecka / / obszaru okna klienta. 
 
    Jeżeli (pName) {if (!Funkcję LoadFile (hwnd, pName)) {/ / nie może załadować pliku; zamknąć okno. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L); 
        }} Zwraca hwnd; 
} 

 

Wskaźnik przekazany parametr fikcyjnymi wiadomości WM_MDICREATE jest przekazywany do funkcji CreateWindow i pojawia się jako pierwszy członek w strukturze CREATESTRUCT , przekazany w wiadomości WM_CREATE . W Multipad okno podrzędne inicjuje się podczas przetwarzania poprzez inicjowanie zmiennych dokumentu w jego dodatkowych danych i tworzenie okna podrzędnego formant edycji wiadomości WM_CREATE.

Index