Compartilhar via


O que é uma janela?

O que é uma janela?

Obviamente, as janelas são centrais para o Windows. Eles são tão importantes que nomearam o sistema operacional em homenagem a eles. Mas o que é uma janela? Quando você pensa em uma janela, você provavelmente pensa em algo assim:

captura de tela de uma janela do aplicativo

Esse tipo de janela é chamado de janela de aplicativo ou janela main. Normalmente, ele tem um quadro com uma barra de título, botões Minimizar e Maximizar e outros elementos de interface do usuário padrão. O quadro é chamado de área não cliente da janela, assim chamado porque o sistema operacional gerencia essa parte da janela. A área dentro do quadro é a área do cliente. Essa é a parte da janela gerenciada pelo programa.

Aqui está outro tipo de janela:

captura de tela de uma janela de controle

Se você não estiver familiarizado com a programação do Windows, pode surpreendê-lo de que os controles de interface do usuário, como botões e caixas de edição, são janelas próprias. A principal diferença entre um controle de interface do usuário e uma janela do aplicativo é que um controle não existe por si só. Em vez disso, o controle é posicionado em relação à janela do aplicativo. Quando você arrasta a janela do aplicativo, o controle se move com ela, como você esperaria. Além disso, o controle e a janela do aplicativo podem se comunicar entre si. (Por exemplo, a janela do aplicativo recebe notificações de clique de um botão.)

Portanto, quando você pensar na janela, não pense simplesmente na janela do aplicativo. Em vez disso, pense em uma janela como uma construção de programação que:

  • Ocupa uma determinada parte da tela.
  • Pode ou não estar visível em um determinado momento.
  • Sabe como desenhar sozinho.
  • Responde a eventos do usuário ou do sistema operacional.

Windows pai e Windows proprietário

No caso de um controle de interface do usuário, a janela de controle é considerada o filho da janela do aplicativo. A janela do aplicativo é o pai da janela de controle. A janela pai fornece o sistema de coordenadas usado para posicionar uma janela filho. Ter uma janela pai afeta aspectos da aparência de uma janela; por exemplo, uma janela filho é recortada para que nenhuma parte da janela filho possa aparecer fora das bordas de sua janela pai.

Outra relação é a relação entre uma janela do aplicativo e uma janela de diálogo modal. Quando um aplicativo exibe uma caixa de diálogo modal, a janela do aplicativo é a janela do proprietário e a caixa de diálogo é uma janela de propriedade . Uma janela de propriedade sempre aparece na frente da janela do proprietário. Ele fica oculto quando o proprietário é minimizado e é destruído ao mesmo tempo que o proprietário.

A imagem a seguir mostra um aplicativo que exibe uma caixa de diálogo com dois botões:

captura de tela de um aplicativo com uma caixa de diálogo

A janela do aplicativo é proprietária da janela de diálogo e a janela de diálogo é o pai de ambas as janelas de botão. O diagrama a seguir mostra estas relações:

ilustração mostrando relações pai/filho e proprietário/propriedade

Identificadores de janela

O Windows são objetos — eles têm código e dados — mas não são classes C++. Em vez disso, um programa faz referência a uma janela usando um valor chamado identificador. Um identificador é um tipo opaco. Essencialmente, é apenas um número que o sistema operacional usa para identificar um objeto. Você pode imaginar o Windows como tendo uma grande tabela de todas as janelas que foram criadas. Ele usa esta tabela para pesquisar janelas por seus identificadores. (Se é exatamente assim que funciona internamente não é importante.) O tipo de dados para identificadores de janela é HWND, que geralmente é pronunciado como "aitch-wind". Os identificadores de janela são retornados pelas funções que criam janelas: CreateWindow e CreateWindowEx.

Para executar uma operação em uma janela, você normalmente chamará alguma função que usa um valor HWND como um parâmetro. Por exemplo, para reposicionar uma janela na tela, chame a função MoveWindow :

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

O primeiro parâmetro é o identificador para a janela que você deseja mover. Os outros parâmetros especificam o novo local da janela e se a janela deve ser redesenhada.

Tenha em mente que identificadores não são ponteiros. Se hwnd for uma variável que contém um identificador, tentar desreferenciar o identificador escrevendo *hwnd será um erro.

Coordenadas de tela e janela

As coordenadas são medidas em pixels independentes do dispositivo. Teremos mais a dizer sobre a parte independente do dispositivo de pixels independentes do dispositivo quando discutirmos os gráficos.

Dependendo da tarefa, você pode medir coordenadas em relação à tela, em relação a uma janela (incluindo o quadro) ou em relação à área do cliente de uma janela. Por exemplo, você posicionaria uma janela na tela usando coordenadas de tela, mas desenharia dentro de uma janela usando coordenadas do cliente. Em cada caso, a origem (0, 0) é sempre o canto superior esquerdo da região.

ilustração mostrando coordenadas de tela, janela e cliente

Avançar

WinMain: o ponto de entrada do aplicativo