A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Tutoriais e Programação

Linguagem C - Projeto Espião

Sex

28

Nov

2008


13:20

(6 votos, média 4.33 de 5) 


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):

LRESULT CALLBACK MainWndProc( HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { static HWND hwndTree; RECT rc, rcStatus; switch (msg) { case WM_CREATE: hwndTree = janelaTree(hwnd,IDJANELATREE); break; case WM_SIZE: SendMessage(hWndStatusbar,msg,wParam,lParam); InitializeStatusBar(hWndStatusbar,1); GetClientRect(hwnd,&rc); GetWindowRect(hWndStatusbar,&rcStatus); rc.bottom -= rcStatus.bottom-rcStatus.top; MoveWindow(hwndTree,0,0,rc.right,rc.bottom,1); break; ...

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:

typedef struct _RECT { // rc LONG left; // esquerda LONG top; // superior LONG right; // direita LONG bottom; // inferior } RECT;

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 wink

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 smile )

Вадим Логофет Сбербанксковорода для индукционных плит отзывыхарьков никас александр лобановскийmeizu pro 4 32gbхарьков события на площадиtopodin отзывы

Informações adicionais