Criando uma janela filho

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.

Index