Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico descreve os elementos de programação que os aplicativos usam para criar e usar janelas; gerenciar relações entre janelas; e dimensionar, mover e exibir janelas.
A visão geral inclui os seguintes tópicos.
- Janela do Ambiente de Trabalho
- Janelas de Aplicações
- Controles e caixas de diálogo
-
Atributos da janela
- Nome da classe
- Nome da janela
- Estilo de janela
- Estilo de janela estendido
- Posição
- Tamanho
- identificador da janela pai ou proprietário
- Identificador de Menu ou Identificador Child-Window
- de identificador de instância de aplicativo
- dados de criação
- maçaneta da janela
- Criação de Janelas
Janela da área de trabalho
Quando você inicia o sistema, ele cria automaticamente a janela da área de trabalho. O da janela da área de trabalho é uma janela definida pelo sistema que pinta o plano de fundo da tela e serve como base para todas as janelas exibidas por todos os aplicativos.
A janela da área de trabalho usa um bitmap para pintar o plano de fundo da tela. O padrão criado pelo bitmap é chamado de papel de parede da área de trabalho. Por padrão, a janela da área de trabalho usa o bitmap de um arquivo de .bmp especificado no registro como o papel de parede da área de trabalho.
A função GetDesktopWindow retorna um identificador para a janela da área de trabalho.
Um aplicativo de configuração do sistema, como um item do Painel de Controle, altera o papel de parede da área de trabalho usando a função SystemParametersInfo com o parâmetro wAction definido como SPI_SETDESKWALLPAPER e o parâmetro lpvParam especificando um nome de arquivo bitmap. SystemParametersInfo carrega o bitmap do arquivo especificado, usa o bitmap para pintar o plano de fundo da tela e insere o novo nome de arquivo no registro.
Janelas de Aplicações
Cada aplicativo gráfico baseado no Windows cria pelo menos uma janela, chamada de janela principal, que serve como a interface primária entre o usuário e o aplicativo. A maioria dos aplicativos também cria outras janelas, direta ou indiretamente, para executar tarefas relacionadas à janela principal. Cada janela desempenha um papel na exibição de saída e recebimento de entrada do usuário.
Quando você inicia um aplicativo, o sistema também associa um botão da barra de tarefas ao aplicativo. O botão barra de tarefas contém o ícone e o título do programa. Quando o aplicativo está ativo, seu botão da barra de tarefas é exibido no estado pressionado.
Uma janela de aplicativo inclui elementos como uma barra de título, uma barra de menus, o menu da janela (anteriormente conhecido como menu do sistema), o botão minimizar, o botão maximizar, o botão restaurar, o botão fechar, uma borda de dimensionamento, uma área do cliente, uma barra de rolagem horizontal e uma barra de rolagem vertical. A janela principal de um aplicativo normalmente inclui todos esses componentes. A ilustração a seguir mostra esses componentes em uma janela principal típica.
Área do Cliente
A área do cliente é a parte de uma janela onde o aplicativo exibe a saída, como texto ou gráficos. Por exemplo, um aplicativo de editoração eletrônica exibe a página atual de um documento na área do cliente. O aplicativo deve fornecer uma função, chamada de procedimento de janela, para processar a entrada para a janela e exibir a saída na área do cliente. Para obter mais informações, consulte Window Procedures.
Área Não Cliente
A barra de título, a barra de menus, o menu da janela, os botões minimizar e maximizar, a borda de dimensionamento e as barras de rolagem são referidos coletivamente como a área não-cliente da janela. O sistema gere a maioria dos aspetos da área não cliente; O aplicativo gerencia a aparência e o comportamento de sua área de cliente.
A barra de título exibe um ícone definido pelo aplicativo e uma linha de texto; Normalmente, o texto especifica o nome do aplicativo ou indica a finalidade da janela. Um aplicativo especifica o ícone e o texto ao criar a janela. A barra de título também possibilita que o usuário mova a janela usando um mouse ou outro dispositivo apontador.
A maioria dos aplicativos inclui uma barra de menus que lista os comandos suportados pelo aplicativo. Os itens na barra de menus representam as principais categorias de comandos. Clicar em um item na barra de menus normalmente abre um menu pop-up cujos itens correspondem às tarefas dentro de uma determinada categoria. Ao clicar em um comando, o usuário direciona o aplicativo para executar uma tarefa.
O menu da janela é criado e gerido pelo sistema. Ele contém um conjunto padrão de itens de menu que, quando escolhidos pelo usuário, definem o tamanho ou a posição de uma janela, fecham o aplicativo ou executam tarefas. Para obter mais informações, consulte Menus.
Os botões no canto superior direito afetam o tamanho e a posição da janela. Quando você clica no botão maximizar, o sistema amplia a janela para o tamanho da tela e posiciona a janela, de modo que cobre toda a área de trabalho, menos a barra de tarefas. Ao mesmo tempo, o sistema substitui o botão maximizar pelo botão restaurar. Quando você clica no botão restaurar, o sistema restaura a janela para seu tamanho e posição anteriores. Quando você clica no botão minimizar, o sistema reduz a janela para o tamanho do botão da barra de tarefas, posiciona a janela sobre o botão da barra de tarefas e exibe o botão da barra de tarefas em seu estado normal. Para restaurar o aplicativo para seu tamanho e posição anteriores, clique no botão da barra de tarefas. Quando você clica no botão fechar, o aplicativo é encerrado.
O contorno de dimensionamento no é uma área ao redor do perímetro da janela que permite que o usuário dimensione a janela usando um mouse ou outro dispositivo apontador.
As barras de rolagem horizontal e vertical convertem a entrada do mouse ou do teclado em valores que uma aplicação utiliza para deslocar o conteúdo da área do cliente horizontal ou verticalmente. Por exemplo, um aplicativo de processamento de texto que exibe um documento extenso normalmente fornece uma barra de rolagem vertical para permitir que o usuário percorra o documento para cima e para baixo.
Controles e caixas de diálogo
Um aplicativo pode criar vários tipos de janelas, além de sua janela principal, incluindo controles e caixas de diálogo.
Um de controle é uma janela que um aplicativo usa para obter uma informação específica do utilizador, como o nome de um ficheiro a abrir ou o tamanho de ponto desejado de uma seleção de texto. Os aplicativos também usam controles para obter as informações necessárias para controlar um recurso específico de um aplicativo. Por exemplo, um aplicativo de processamento de texto normalmente fornece um controle para permitir que o usuário ative e desative a quebra automática de texto. Para obter mais informações, consulte Controles do Windows.
Os controles são sempre usados em conjunto com outra janela — normalmente, uma caixa de diálogo. Uma caixa de diálogo é uma janela que contém um ou mais controles. Um aplicativo usa uma caixa de diálogo para solicitar ao usuário a entrada necessária para concluir um comando. Por exemplo, um aplicativo que inclui um comando para abrir um arquivo exibiria uma caixa de diálogo que inclui controles nos quais o usuário especifica um caminho e um nome de arquivo. As caixas de diálogo normalmente não usam o mesmo conjunto de componentes de janela que uma janela principal. A maioria tem uma barra de título, um menu de janela, uma borda (sem dimensionamento) e uma área de cliente, mas normalmente não têm uma barra de menus, botões de minimização e maximização ou barras de rolagem. Para obter mais informações, consulte as caixas de diálogo.
Uma caixa de mensagem é uma caixa de diálogo especial que exibe uma nota, cuidado ou aviso para o usuário. Por exemplo, uma caixa de mensagem pode informar o usuário de um problema que o aplicativo encontrou durante a execução de uma tarefa. Para obter mais informações, consulte Caixas de Mensagem.
Atributos da janela
Um aplicativo deve fornecer as seguintes informações ao criar uma janela. (Com exceção do Window Handle, que a função de criação retorna para identificar exclusivamente a nova janela.)
- Nome da classe
- Nome da janela
- Estilo de janela
- Estilo de janela estendido
- Posição
- Tamanho
- identificador da janela pai ou proprietário
- Manipulador de menu ou identificador Child-Window
- Identificador de Instância de Aplicação
- Dados de Criação
- Manípulo da Janela
Esses atributos de janela são descritos nas seções a seguir.
Nome da classe
Cada janela pertence a uma classe de janela. Um aplicativo deve registrar uma classe window antes de criar qualquer janela dessa classe. A classe window define a maioria dos aspetos da aparência e do comportamento de uma janela. O principal componente de uma classe de janela é o procedimento de janela , uma função que recebe e processa todas as entradas e solicitações enviadas para a janela. O sistema fornece a entrada e solicitações na forma de mensagens . Para obter mais informações, consulte Classes de janela, Procedimentos de janelae Mensagens e filas de mensagens.
Nome da janela
Um nome de janela é uma cadeia de texto que identifica uma janela para o usuário. Uma janela principal, caixa de diálogo ou caixa de mensagem normalmente exibe seu nome de janela em sua barra de título, se presente. Um controle pode exibir seu nome de janela, dependendo da classe do controle. Por exemplo, botões, controles de edição e controles estáticos exibem seus nomes de janela dentro do retângulo ocupado pelo controle. No entanto, os controlos como caixas de listagem e caixas de combinação não mostram os respetivos nomes de janela.
Para alterar o nome da janela depois de criar uma janela, use a função SetWindowText . Esta função usa as funções GetWindowTextLength e GetWindowText para recuperar a cadeia de caracteres do nome da janela atual.
Estilo da janela
Cada janela tem um ou mais estilos de janela. Um estilo de janela é uma constante nomeada que define um aspeto da aparência e do comportamento da janela que não é especificado pela classe da janela. Um aplicativo geralmente define estilos de janela ao criar janelas. Ele também pode definir os estilos depois de criar uma janela usando a funçãoSetWindowLong.
O sistema e, até certo ponto, o procedimento de janela para a classe, interpretam os estilos de janela.
Alguns estilos de janela se aplicam a todas as janelas, mas a maioria se aplica a janelas de classes de janela específicas. Os estilos gerais de janela são representados por constantes que começam com o prefixo WS_; eles podem ser combinados com o operador OR para formar diferentes tipos de janelas, incluindo janelas principais, caixas de diálogo e janelas filhas. Os estilos de janela específicos da classe definem a aparência e o comportamento das janelas pertencentes às classes de controle predefinidas. Por exemplo, a classe SCROLLBAR especifica um controle de barra de rolagem, mas os estilos SBS_HORZ e SBS_VERT determinam se um controle de barra de rolagem horizontal ou vertical é criado.
Para obter listas de estilos que podem ser usados pelo Windows, consulte os seguintes tópicos:
- Estilos de janela
- Estilos de botão
- Estilos de caixa de combinação
- Editar estilos de controle
- Estilos de caixa de listagem
- Estilos de controle de edição avançados
- Estilos de controle da barra de rolagem
- Estilos de controle estático
Estilo de janela estendida
Cada janela pode, opcionalmente, ter um ou mais estilos de janela estendidos. Uma constante nomeada de estilo de janela estendida é uma que define um aspeto da aparência e do comportamento da janela que não é especificado pela classe de janela ou pelos outros estilos de janela. Um aplicativo geralmente define estilos de janela estendida ao criar janelas. Ele também pode definir os estilos depois de criar uma janela usando a funçãoSetWindowLong.
Para obter mais informações, consulte CreateWindowEx.
Posição
A posição de uma janela é definida como as coordenadas do seu canto superior esquerdo. Essas coordenadas, às vezes chamadas de coordenadas da janela, são sempre relativas ao canto superior esquerdo do ecrã ou, para uma janela filha, ao canto superior esquerdo da área de cliente da janela pai. Por exemplo, uma janela de nível superior com as coordenadas (10,10) é colocada 10 pixels à direita do canto superior esquerdo da tela e 10 pixels abaixo dela. Uma janela filho com as coordenadas (10,10) é colocada 10 pixels à direita do canto superior esquerdo da área do cliente da janela pai e 10 pixels abaixo dela.
A função WindowFromPoint recupera um identificador para a janela que ocupa um ponto específico no ecrã. Da mesma forma, as funções ChildWindowFromPoint e ChildWindowFromPointEx recuperam um identificador para a janela filha que ocupa um ponto específico na área de cliente da janela-pai. Embora ChildWindowFromPointEx consiga ignorar janelas filho invisíveis, desabilitadas e transparentes, ChildWindowFromPoint não consegue.
Tamanho
O tamanho de uma janela (largura e altura) é dado em pixels. Uma janela pode ter largura ou altura zero. Se um aplicativo definir a largura e a altura de uma janela como zero, o sistema definirá o tamanho para o tamanho mínimo padrão da janela. Para descobrir o tamanho mínimo de janela padrão, um aplicativo usa a funçãoGetSystemMetricscom os sinalizadores SM_CXMIN e SM_CYMIN.
Um aplicativo pode precisar criar uma janela com uma área de cliente de um tamanho específico. As funções AdjustWindowRect e AdjustWindowRectEx calculam o tamanho necessário de uma janela com base no tamanho desejado da área do cliente. O aplicativo pode passar os valores de tamanho resultantes para a funçãoCreateWindowEx.
Um aplicativo pode dimensionar uma janela para que ela seja extremamente grande; no entanto, ele não deve dimensionar uma janela para que ela seja maior do que a tela. Antes de definir o tamanho de uma janela, o aplicativo deve verificar a largura e a altura da tela usando GetSystemMetrics com os sinalizadores SM_CXSCREEN e SM_CYSCREEN.
Identificador da Janela Parental ou Propriedade
Uma janela pode ter uma janela pai. Uma janela que tem um pai é chamada de janela filho . A janela pai fornece o sistema de coordenadas usado para posicionar uma janela filho. Ter uma janela pai afeta aspetos da aparência de uma janela; por exemplo, uma janela filha é cortada para que nenhuma parte da janela filha possa aparecer fora dos limites da janela pai.
Uma janela que não tem progenitor, ou cujo progenitor é a janela da área de trabalho, é chamada de janela de nível superior. Um aplicativo pode usar a função EnumWindows para obter um identificador para cada janela de nível superior na tela. EnumWindows passa, por sua vez, o identificador de cada janela de nível superior para uma função de retorno de chamada definida pelo aplicativo, EnumWindowsProc.
Uma janela de nível superior pode ser proprietária de outra janela ou ser sua subordinada. Uma janela subordinada sempre aparece à frente da sua janela principal, fica oculta quando a janela principal é minimizada e é destruída quando a janela principal é destruída. Para obter mais informações, consulte Windows de propriedade.
Identificador de menu ou identificador de Child-Window
Uma janela filho pode ter um identificador de janela filho , um valor exclusivo definido pelo aplicativo associado à janela filho. Os identificadores de janela secundária são especialmente úteis em aplicações que criam várias janelas secundárias. Ao criar uma janela filho, um aplicativo especifica o identificador da janela filho. Depois de criar a janela, o aplicativo pode alterar o identificador da janela usando a funçãoSetWindowLong ou pode recuperar o identificador usando a funçãoGetWindowLong.
Todas as janelas, exceto uma janela filha, podem ter um menu. Um aplicativo pode incluir um menu fornecendo um identificador de menu ao registrar a classe da janela ou ao criar a janela.
Identificador de instância do aplicativo
Cada aplicativo tem um identificador de instância associado a ele. O sistema fornece o identificador de instância para um aplicativo quando o aplicativo é iniciado. Como ele pode executar várias cópias do mesmo aplicativo, o sistema usa identificadores de instância internamente para distinguir uma instância de um aplicativo de outra. O aplicativo deve especificar o identificador de instância em muitas janelas diferentes, incluindo aquelas que criam janelas.
Dados de Criação
Cada janela pode ter dados de criação definidos pelo aplicativo associados a ela. Quando a janela é criada pela primeira vez, o sistema passa um ponteiro dos dados para o procedimento da janela que está a ser criada. O procedimento de janela usa os dados para inicializar variáveis definidas pelo aplicativo.
Puxador da janela
Depois de criar uma janela, a função de criação retorna um identificador de janela que identifica exclusivamente a janela. Um identificador de janela é do tipo de dados HWND; uma aplicação deve usar este tipo ao declarar uma variável que contém um identificador de janela. Um aplicativo usa esse identificador em outras funções para direcionar suas ações para a janela.
Um aplicativo pode usar a função FindWindow para descobrir se existe uma janela com o nome de classe especificado ou o nome da janela no sistema. Se essa janela existir, FindWindow retornará um identificador para a janela. Para limitar a pesquisa às janelas filhas de um aplicativo específico, use a funçãoFindWindowEx.
A função IsWindow determina se um identificador de janela identifica uma janela válida e existente. Existem constantes especiais que podem substituir uma alça de janela em determinadas funções. Por exemplo, um aplicativo pode usar HWND_BROADCAST nas funções SendMessage e SendMessageTimeout, ou HWND_DESKTOP na função MapWindowPoints.
Criação de Janelas
Para criar janelas de aplicativos, use a função CreateWindow ou a função CreateWindowEx. Você deve fornecer as informações necessárias para definir os atributos da janela. CreateWindowEx tem um parâmetro, dwExStyle, que CreateWindow não tem; caso contrário, as funções são idênticas. Na verdade, CreateWindow simplesmente chama CreateWindowEx com o parâmetro dwExStyle definido como zero. Por esse motivo, o restante desta visão geral refere-se apenas a CreateWindowEx.
Esta seção contém os seguintes tópicos:
Observação
Há funções adicionais para criar janelas para fins especiais, como caixas de diálogo e caixas de mensagem. Para obter mais informações, consulte DialogBox, CreateDialoge MessageBox.
Criação da Janela Principal
Cada aplicativo baseado no Windows deve ter WinMain como sua função de ponto de entrada. WinMain executa uma série de tarefas, incluindo registrar a classe de janela para a janela principal e criar a janela principal. WinMain registra a classe de janela principal chamando a funçãoRegisterClass e cria a janela principal chamando a funçãoCreateWindowEx.
Sua função WinMain também pode limitar seu aplicativo a uma única instância. Crie um mutex nomeado usando a função CreateMutex. Se GetLastError retornar ERROR_ALREADY_EXISTS, outra instância do seu aplicativo existe (ele criou o mutex) e você deve sair WinMain.
O sistema não exibe automaticamente a janela principal depois de criá-la; em vez disso, um aplicativo deve usar a função ShowWindow para exibir a janela principal. Depois de criar a janela principal, a função WinMain do aplicativo chama ShowWindow, passando-lhe dois parâmetros: um identificador para a janela principal e um sinalizador especificando se a janela principal deve ser minimizada ou maximizada quando é exibida pela primeira vez. Normalmente, o sinalizador pode ser definido como qualquer uma das constantes que começam com o prefixo SW_. No entanto, quando ShowWindow é chamado para exibir a janela principal do aplicativo, o sinalizador deve ser definido como SW_SHOWDEFAULT. Este sinalizador diz ao sistema para exibir a janela conforme indicado pelo programa que iniciou o aplicativo.
Se uma classe de janela foi registrada com a versão Unicode do RegisterClass, a janela recebe apenas mensagens Unicode. Para determinar se uma janela usa o conjunto de caracteres Unicode ou não, chame IsWindowUnicode.
Window-Creation Mensagens
Ao criar uma janela, o sistema envia mensagens ao procedimento da janela. O sistema envia a mensagem WM_NCCREATE depois de criar a área não cliente da janela e a mensagem WM_CREATE depois de criar a área do cliente. O procedimento de janela recebe ambas as mensagens antes que o sistema exiba a janela. Ambas as mensagens incluem um ponteiro para uma estrutura CREATESTRUCT que contém todas as informações especificadas na função CreateWindowEx. Normalmente, o procedimento da janela executa tarefas de inicialização ao receber essas mensagens.
Ao criar uma janela filho, o sistema envia a mensagem WM_PARENTNOTIFY para a janela pai depois de enviar as mensagens WM_NCCREATE e WM_CREATE. Ele também envia outras mensagens ao criar uma janela. O número e a ordem dessas mensagens dependem da classe e do estilo da janela e da função usada para criar a janela. Essas mensagens são descritas em outros tópicos neste arquivo de ajuda.
Aplicações Multithread
Um aplicativo baseado no Windows pode ter vários threads de execução e cada thread pode criar janelas. O thread que cria uma janela deve conter o código para seu procedimento de janela.
Um aplicativo pode usar a função EnumThreadWindows para enumerar as janelas criadas por um thread específico. Essa função passa o identificador para cada janela de thread, sucessivamente, para uma função de callback definida pelo aplicativo, EnumThreadWndProc.
A função GetWindowThreadProcessId retorna o identificador da thread que criou uma janela específica.
Para definir o estado show de uma janela criada por outro thread, use a funçãoShowWindowAsync.