Função CreateWindowExA (winuser.h)

Cria uma janela filho, pop-up ou sobreposta com um estilo de janela estendido; caso contrário, essa função é idêntica à função CreateWindow . Para obter mais informações sobre como criar uma janela e para obter descrições completas dos outros parâmetros de CreateWindowEx, consulte CreateWindow.

Sintaxe

HWND CreateWindowExA(
  [in]           DWORD     dwExStyle,
  [in, optional] LPCSTR    lpClassName,
  [in, optional] LPCSTR    lpWindowName,
  [in]           DWORD     dwStyle,
  [in]           int       X,
  [in]           int       Y,
  [in]           int       nWidth,
  [in]           int       nHeight,
  [in, optional] HWND      hWndParent,
  [in, optional] HMENU     hMenu,
  [in, optional] HINSTANCE hInstance,
  [in, optional] LPVOID    lpParam
);

Parâmetros

[in] dwExStyle

Tipo: DWORD

O estilo de janela estendido da janela que está sendo criada. Para obter uma lista de valores possíveis, consulte Estilos de janela estendidos.

[in, optional] lpClassName

Tipo: LPCTSTR

Uma cadeia de caracteres terminada em nulo ou um átomo de classe criado por uma chamada anterior para a função RegisterClass ou RegisterClassEx . O átomo deve estar na palavra de baixa ordem de lpClassName; a palavra de alta ordem deve ser zero. Se lpClassName for uma cadeia de caracteres, ele especificará o nome da classe de janela. O nome da classe pode ser qualquer nome registrado com RegisterClass ou RegisterClassEx, desde que o módulo que registra a classe também seja o módulo que cria a janela. O nome da classe também pode ser qualquer um dos nomes de classe de sistema predefinidos.

[in, optional] lpWindowName

Tipo: LPCTSTR

O nome da janela. Se o estilo da janela especificar uma barra de título, o título da janela apontado por lpWindowName será exibido na barra de título. Ao usar CreateWindow para criar controles, como botões, caixas de marcar e controles estáticos, use lpWindowName para especificar o texto do controle. Ao criar um controle estático com o estilo SS_ICON , use lpWindowName para especificar o nome ou o identificador do ícone. Para especificar um identificador, use a sintaxe "#num".

[in] dwStyle

Tipo: DWORD

O estilo da janela que está sendo criada. Esse parâmetro pode ser uma combinação dos valores de estilo de janela, além dos estilos de controle indicados na seção Comentários.

[in] X

Tipo: int

A posição horizontal inicial da janela. Para uma janela pop-up ou sobreposta, o parâmetro x é a coordenada x inicial do canto superior esquerdo da janela, nas coordenadas da tela. Para uma janela filho, x é a coordenada x do canto superior esquerdo da janela em relação ao canto superior esquerdo da área do cliente da janela pai. Se x estiver definido como CW_USEDEFAULT, o sistema selecionará a posição padrão para o canto superior esquerdo da janela e ignorará o parâmetro y . CW_USEDEFAULT é válido apenas para janelas sobrepostas; se for especificado para uma janela pop-up ou filho, os parâmetros x e y serão definidos como zero.

[in] Y

Tipo: int

A posição vertical inicial da janela. Para uma janela pop-up ou sobreposta, o parâmetro y é a coordenada y inicial do canto superior esquerdo da janela, em coordenadas de tela. Para uma janela filho, y é a coordenada y inicial do canto superior esquerdo da janela filho em relação ao canto superior esquerdo da área do cliente da janela pai. Para uma caixa de listagem y é a coordenada y inicial do canto superior esquerdo da área do cliente da caixa de listagem em relação ao canto superior esquerdo da área do cliente da janela pai.

Se uma janela sobreposta for criada com o conjunto de bits de estilo WS_VISIBLE e o parâmetro x for definido como CW_USEDEFAULT, o parâmetro y determinará como a janela é mostrada. Se o parâmetro y for CW_USEDEFAULT, o gerenciador de janelas chamará ShowWindow com o sinalizador SW_SHOW após a criação da janela. Se o parâmetro y for algum outro valor, o gerenciador de janelas chamará ShowWindow com esse valor como o parâmetro nCmdShow .

[in] nWidth

Tipo: int

A largura, em unidades de dispositivo, da janela. Para janelas sobrepostas, nWidth é a largura da janela, em coordenadas de tela ou CW_USEDEFAULT. Se nWidth for CW_USEDEFAULT, o sistema selecionará uma largura e altura padrão para a janela; a largura padrão se estende das coordenadas x iniciais até a borda direita da tela; a altura padrão se estende da coordenada y inicial até a parte superior da área do ícone. CW_USEDEFAULT é válido apenas para janelas sobrepostas; se CW_USEDEFAULT for especificado para uma janela pop-up ou filho, o parâmetro nWidth e nHeight serão definidos como zero.

[in] nHeight

Tipo: int

A altura, em unidades de dispositivo, da janela. Para janelas sobrepostas, nHeight é a altura da janela, em coordenadas de tela. Se o parâmetro nWidth estiver definido como CW_USEDEFAULT, o sistema ignorará o nHeight.

[in, optional] hWndParent

Digite: HWND

Um identificador para a janela pai ou proprietário da janela que está sendo criada. Para criar uma janela filho ou uma janela de propriedade, forneça um identificador de janela válido. Esse parâmetro é opcional para janelas pop-up.

Para criar uma janela somente mensagem, forneça HWND_MESSAGE ou um identificador para uma janela somente mensagem existente.

[in, optional] hMenu

Tipo: HMENU

Um identificador para um menu ou especifica um identificador de janela filho, dependendo do estilo da janela. Para uma janela pop-up ou sobreposta, hMenu identifica o menu a ser usado com a janela; ele poderá ser NULL se o menu de classe for usado. Para uma janela filho, hMenu especifica o identificador de janela filho, um valor inteiro usado por um controle de caixa de diálogo para notificar seu pai sobre eventos. O aplicativo determina o identificador de janela filho; ele deve ser exclusivo para todas as janelas filho com a mesma janela pai.

[in, optional] hInstance

Tipo: HINSTANCE

Um identificador para a instância do módulo a ser associada à janela.

[in, optional] lpParam

Tipo: LPVOID

Ponteiro para um valor a ser passado para a janela por meio da estrutura CREATETRUCT (membro lpCreateParams ) apontada pelo parâmetro lParam da mensagem WM_CREATE . Essa mensagem é enviada para a janela criada por essa função antes de retornar.

Se um aplicativo chamar CreateWindow para criar uma janela de cliente MDI, lpParam deverá apontar para uma estrutura CLIENTCREATESTRUCT . Se uma janela do cliente MDI chamar CreateWindow para criar uma janela filho MDI, lpParam deverá apontar para uma estrutura MDICREATESTRUCT . LpParam poderá ser NULL se nenhum dado adicional for necessário.

Retornar valor

Digite: HWND

Se a função for bem-sucedida, o valor retornado será um identificador para a nova janela.

Se a função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.

Normalmente, essa função falha por um dos seguintes motivos:

  • um valor de parâmetro inválido
  • a classe do sistema foi registrada por um módulo diferente
  • O gancho de WH_CBT é instalado e retorna um código de falha
  • se um dos controles no modelo de caixa de diálogo não estiver registrado ou seu procedimento de janela falhar WM_CREATE ou WM_NCCREATE

Comentários

A função CreateWindowEx envia mensagens WM_NCCREATE, WM_NCCALCSIZE e WM_CREATE para a janela que está sendo criada.

Se a janela criada for uma janela filho, sua posição padrão será na parte inferior da ordem Z. Se a janela criada for uma janela de nível superior, sua posição padrão estará na parte superior da ordem Z (mas abaixo de todas as janelas superiores, a menos que a janela criada seja a maior).

Para obter informações sobre como controlar se a Barra de Tarefas exibe um botão para a janela criada, consulte Gerenciando botões da barra de tarefas.

Para obter informações sobre como remover uma janela, consulte a função DestroyWindow .

As classes de controle predefinidas a seguir podem ser especificadas no parâmetro lpClassName . Observe os estilos de controle correspondentes que você pode usar no parâmetro dwStyle .

Classe Significado
BUTTON Designa uma pequena janela filho retangular que representa um botão que o usuário pode clicar para ativá-la ou desativá-la. Os controles de botão podem ser usados sozinhos ou em grupos e podem ser rotulados ou exibidos sem texto. Os controles de botão normalmente alteram a aparência quando o usuário clica neles. Para obter mais informações, consulte Botões.

Para obter uma tabela dos estilos de botão que você pode especificar no parâmetro dwStyle , consulte Estilos de botão.

COMBOBOX Designa um controle que consiste em uma caixa de listagem e um campo de seleção semelhante a um controle de edição. Ao usar esse estilo, um aplicativo deve exibir a caixa de listagem o tempo todo ou habilitar uma caixa de listagem suspensa. Se a caixa de listagem estiver visível, digitar caracteres no campo de seleção realçará a primeira entrada de caixa de listagem que corresponde aos caracteres digitado. Por outro lado, selecionar um item na caixa de listagem exibe o texto selecionado no campo de seleção. Para obter mais informações, consulte Caixas de combinação.

Para obter uma tabela dos estilos de caixa de combinação que você pode especificar no parâmetro dwStyle , consulte Estilos de caixa de combinação.

EDIT Designa uma janela filho retangular na qual o usuário pode digitar texto do teclado. O usuário seleciona o controle e dá a ele o foco do teclado clicando nele ou movendo-se para ele pressionando a tecla TAB. O usuário pode digitar texto quando o controle de edição exibe um cursor piscando; use o mouse para mover o cursor, selecionar caracteres a serem substituídos ou posicionar o cursor para inserir caracteres; ou use a chave para excluir caracteres. Para obter mais informações, consulte Editar controles.

Para obter uma tabela dos estilos de controle de edição que você pode especificar no parâmetro dwStyle , consulte Editar Estilos de Controle.

LISTBOX Designa uma lista de cadeias de caracteres. Especifique esse controle sempre que um aplicativo precisar apresentar uma lista de nomes, como nomes de arquivo, dos quais o usuário pode escolher. O usuário pode selecionar uma cadeia de caracteres clicando nela. Uma cadeia de caracteres selecionada é realçada e uma mensagem de notificação é passada para a janela pai. Para obter mais informações, consulte Caixas de listagem.

Para obter uma tabela dos estilos de caixa de listagem que você pode especificar no parâmetro dwStyle , consulte Estilos de caixa de listagem.

MDICLIENT Designa uma janela do cliente MDI. Essa janela recebe mensagens que controlam as janelas filho do aplicativo MDI. Os bits de estilo recomendados são WS_CLIPCHILDREN e WS_CHILD. Especifique os estilos WS_HSCROLL e WS_VSCROLL para criar uma janela de cliente MDI que permite ao usuário rolar janelas filho MDI para exibição. Para obter mais informações, consulte Interface de vários documentos.
RichEdit Designa um controle microsoft rich edit 1.0. Essa janela permite que o usuário exiba e edite texto com formatação de caracteres e parágrafos e pode incluir objetos COM (Component Object Model) inseridos. Para obter mais informações, consulte Controles de edição avançada.

Para obter uma tabela dos estilos de controle de edição avançada que você pode especificar no parâmetro dwStyle , consulte Estilos de controle de edição avançada.

RICHEDIT_CLASS Designa um controle do Microsoft Rich Edit 2.0. Esses controles permitem que o usuário exiba e edite texto com formatação de caracteres e parágrafos e pode incluir objetos COM inseridos. Para obter mais informações, consulte Controles de edição avançada.

Para obter uma tabela dos estilos de controle de edição avançada que você pode especificar no parâmetro dwStyle , consulte Estilos de controle de edição avançada.

SCROLLBAR Designa um retângulo que contém uma caixa de rolagem e tem setas de direção em ambas as extremidades. A barra de rolagem envia uma mensagem de notificação para sua janela pai sempre que o usuário clica no controle. A janela pai é responsável por atualizar a posição da caixa de rolagem, se necessário. Para obter mais informações, consulte Barras de rolagem.

Para obter uma tabela dos estilos de controle de barra de rolagem que você pode especificar no parâmetro dwStyle , consulte Estilos de controle de barra de rolagem.

STATIC Designa um campo de texto simples, uma caixa ou um retângulo usado para rotular, caixa ou separar outros controles. Os controles estáticos não recebem nenhuma entrada e não fornecem nenhuma saída. Para obter mais informações, consulte Controles estáticos.

Para obter uma tabela dos estilos de controle estáticos que você pode especificar no parâmetro dwStyle , consulte Estilos de controle estático.

 

O valor WS_EX_NOACTIVATE para dwExStyle impede a ativação em primeiro plano pelo sistema. Para impedir a ativação da fila quando o usuário clica na janela, você deve processar a mensagem WM_MOUSEACTIVATE adequadamente. Para colocar a janela em primeiro plano ou ativá-la programaticamente, use SetForegroundWindow ou SetActiveWindow. Retornar FALSE para WM_NCACTIVATE impede que a janela perca a ativação da fila. No entanto, o valor retornado é ignorado no momento da ativação.

Com WS_EX_COMPOSITED definido, todos os descendentes de uma janela recebem a ordem de pintura de baixo para cima usando buffer duplo. A ordem de pintura de baixo para cima permite que uma janela descendente tenha efeitos de translúcibilidade (alfa) e transparência (chave de cor), mas somente se a janela decrescente também tiver o WS_EX_TRANSPARENT bit definido. O buffer duplo permite que a janela e seus descendentes sejam pintados sem cintilação.

Exemplo

O código de exemplo a seguir ilustra o uso de CreateWindowExA.

BOOL Create(
        PCWSTR lpWindowName,
        DWORD dwStyle,
        DWORD dwExStyle = 0,
        int x = CW_USEDEFAULT,
        int y = CW_USEDEFAULT,
        int nWidth = CW_USEDEFAULT,
        int nHeight = CW_USEDEFAULT,
        HWND hWndParent = 0,
        HMENU hMenu = 0
        )
    {
        WNDCLASS wc = {0};

        wc.lpfnWndProc   = DERIVED_TYPE::WindowProc;
        wc.hInstance     = GetModuleHandle(NULL);
        wc.lpszClassName = ClassName();

        RegisterClass(&wc);

        m_hwnd = CreateWindowEx(
            dwExStyle, ClassName(), lpWindowName, dwStyle, x, y,
            nWidth, nHeight, hWndParent, hMenu, GetModuleHandle(NULL), this
            );

        return (m_hwnd ? TRUE : FALSE);
    }

Observação

O cabeçalho winuser.h define CreateWindowEx como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll
Conjunto de APIs ext-ms-win-ntuser-window-l1-1-0 (introduzido no Windows 8)

Confira também

Sobre a interface de vários documentos

CLIENTCREATESTRUCT

CREATESTRUCT

Conceitual

Createwindow

DestroyWindow

EnableWindow

Outros recursos

Referência

Registerclass

Registerclassex

SetActiveWindow

Setforegroundwindow

Setwindowlong

Setwindowpos

Showwindow

WM_CREATE

WM_NCCALCSIZE

WM_NCCREATE

WM_PAINT

WM_PARENTNOTIFY

Windows