Para criar uma janela filho MDI, um aplicativo pode chamar a função CreateMDIWindow ou envie uma mensagem de WM_MDICREATE para a janela do cliente MDI. (O aplicativo pode usar o CreateWindowEx função com o estilo WS_EX_MDICHILD para criar o filho MDI windows.) Uma aplicação MDI Simples-threaded pode usar qualquer método para criar uma janela filho. Um thread em um aplicativo multithread do MDI deve usar o CreateMDIWindow ou o CreateWindowEx função para criar uma janela filho em um thread diferente.
O lParam parâmetro de uma mensagem WM_MDICREATE é um ponteiro até que ponto para uma estrutura MDICREATESTRUCT . A estrutura inclui quatro membros da dimensão: x e y, que indicam as posições horizontal e verticais da janela e cx e cy, que indicam as extensões horizontais e verticais da janela. Qualquer um desses membros pode ser atribuído explicitamente pelo aplicativo, ou pode ser definidos para CW_USEDEFAULT, em que caso o sistema escolhe uma posição, tamanho ou ambos, de acordo com um algoritmo em cascata. Em qualquer caso, todos os quatro membros devem ser inicializados. Multipad usa CW_USEDEFAULT para todas as dimensões.
O último membro da estrutura MDICREATESTRUCT é o membro de estilo , que pode conter bits estilo da janela. Para criar uma janela de filho MDI que pode ter qualquer combinação de estilos de janela, especifique o estilo de janela MDIS_ALLCHILDSTYLES. Quando esse estilo não for especificado, uma janela filho MDI tem os WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL e WS_VSCROLL estilos como configurações padrão.
MultiPad cria seu filho MDI windows usando sua função AddFile definida localmente (localizada no arquivo de origem MPFILE.C). AddFile The função define o título da janela filho atribuindo o szTitle membro da estrutura MDICREATESTRUCT da janela a qualquer um o nome do arquivo a ser editado ou para "Untitled." O szClass membro é definido como o nome da classe de janela de filho MDI registrado na função de InitializeApplication do Multipad. O membro hOwner é definido como o identificador de instância do aplicativo.
O exemplo a seguir mostra a função AddFile em Multipad.
HWND &APIENTRY AddFile(pName) CHAR * pName;
{HWND hwnd;
CHAR sz [160];
MDICREATESTRUCT mcs;
se (! pName) {/ / se o pName parâmetro é NULL, carregar o "Untitled" / / Cadeia de caracteres de recurso STRINGTABLE e defina o szTitle / / membro da MDICREATESTRUCT.
LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz));
MCS.szTitle = sz (LPCTSTR);
} pessoa / / título da janela com o caminho completo e nome do arquivo, / / obtido por chamado a função OpenFile com o / / bandeira OF_PARSE, que é chamada antes de AddFile().
MCS.szTitle = of.szPathName;
MCS.szClass = szChild;
MCS.hOwner = hInst;
/ / Use o tamanho padrão para a janela filho.
MCS.x = mcs.cx = CW_USEDEFAULT;
MCS.y = mcs.cy = CW_USEDEFAULT;
/ / Dar a janela filho o estilo padrão. StyleDefault / / variável é definida nos MULTIPAD.C. mcs.style = styleDefault;
/ / Tell a janela do cliente MDI para criar a janela filho.
HWND = (HWND) SendMessage (hwndMDIClient, WM_MDICREATE, 0, (LONG) amp (LPMDICREATESTRUCT); mcs);
/ / Se o arquivo for encontrado, ler seu conteúdo na criança / / área cliente da janela.
se (pName) {if (!LoadFile (hwnd, pName)) {/ / não é possível carregar o arquivo, feche a janela.
SendMessage (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L);
}} retornar hwnd;
}
O ponteiro passado a lParam parâmetro da mensagem WM_MDICREATE é passado para a função CreateWindow e aparece como o primeiro membro da estrutura de CREATESTRUCT , passados a mensagem WM_CREATE . Multipad, janela filho inicializa por si próprio durante WM_CREATE mensagem processamento por inicializar variáveis do documento em seus dados extras e pela criação de janela de filho do Controlarar de editar.