Tutoriais e Programação
Linguagem C - Projeto Espião
Sex 28 Nov 2008 13:20 |
- Detalhes
- Categoria: Linguagem C
- Atualização: Sábado, 29 Novembro 2008 18:54
- Autor: vovó Vicki
- Acessos: 25953
Movendo e redimensionando a janela da árvore
Como foi dito acima, na descrição dos parâmetros nWidth e nHeight, vamos redimensionar a janela-filha da árvore na nossa central de mensagens através da interceptação da mensagem WM_SIZE. Completamos o código deste caso com o seguinte (linhas 5 e 14 a 17):
Inicialmente manifestamos rc e rcStatus como RECT. RECT é uma estrutura que define as coordenadas do canto superior esquerdo e do inferior direito de um retângulo. A definição do tipo é a seguinte:
Usando a função da API GetClientRect, o parâmetro hwnd leva o manipulador (handle) da janela-mãe e o parâmetro &rc é o ponteiro para o endereço onde os valores correspondentes às coordenadas da janela-mãe devem ser armazenados. Estas coordenadas marcam a área disponível, onde é possível desenhar, excluindo as bordas, o título, o menu e outras partes da janela.
Como temos uma barra de status na nossa janela-mãe, esta área precisa ser subtraída da área de desenho. Neste caso estamos interessados na área total da janela, e não apenas na área de desenho. Por isto utilizamos a função da API GetWindowRect e transferimos para o endereço indicado pelo ponteiro de rcStatus, o &rcStatus, as coordenadas referentes a este retângulo. A seguir, atribuímos a rc.bottom o valor da coordenada inferior da janela-mãe subtraído do valor da área da barra de status.
Uma vez que foi determinada a área de desenho realmente disponível para o controle da árvore, movemos a janela deste controle para as coordenadas desejadas através de uma chamada à função da API MoveWindow. Esta função pede inicialmente o manipulador da janela que deve ser movida (hwndTree), a janela-filha do controle da árvore. Seguem as coordenadas do retângulo que será preenchido pelo controle e, como último parâmetro, um valor lógico indicando se a janela deve ser redesenhada (TRUE ou 1) ou não (FALSE ou 0).
Observações da vó
É claro que, em se tratando de um projeto ambicioso, um módulo apenas não vai dar conta do recado. São muitos os aspectos que precisam ser abordados...
Mas, antes de prosseguir para a emocionante expedição de caça a janelas, dê uma conferida no código que foi adicionado (se você ainda não adicionou o código descrito, faça-o agora). Salve espiao.c para atualizar o código fonte, compile e rode o programa espiao.exe. Está bem, pode reclamar mas, se não deu erro e se não mudou nada no programa, fique feliz! Vida de programador é assim mesmo
Primeira constatação: se não deu erro é sinal que você digitou corretamente o código adicional. Segunda constatação: se o título, o menu e a barra de status da janela principal não foram detonados é sinal que você fez as contas certas para as coordenadas. A janela-filha do controle da árvore, apesar de vazia, está dentro da janela-mãe e não está fazendo estragos.
Se tudo estiver nos conformes, então vamos caçar janelas. O próximo tutorial vai testar a sua pontaria (e a minha também )
- << Anterior
- Próximo