Informática Numaboa - Tutoriais e Programação
Pintando texto (masm)
Ter 20 Jan 2009 22:10 |
- Detalhes
- Categoria: Assembly Numaboa (antigo oiciliS)
- Atualização: Domingo, 21 Junho 2009 18:45
- Autor: vovó Vicki
- Acessos: 11965
Uma janela com a frase Assembly Numaboa
O modelo do código fonte é nosso velho conhecido, o mesmo mostrado no tutorial "". Neste tutorial falaremos apenas do código adicional e, é claro, ele será adicionado na função gerenteMensagem. Veja a função novamente:
Instanciando as variáveis locais
Já vimos que vamos precisar de um manipulador do contexto de dispositivo, de uma estrutura PAINTSTRUCT e de uma estrutura RECT. Se você leu o texto de apoio Trabalhando com Estruturas, sabe do que estou falando; se não, faça-o agora, pois vai precisar destas informações.
O contexto de dispositivo é gerenciado pelo sistema e precisamos apenas do seu manipulador: vamos chamá-lo de mDC.
A estrutura PAINTSTRUCT contém 5 membros: 3 reservados apenas para uso interno do Windows, o que contém o manipulador do contexto de dispositivo e o que contém a informação se o fundo deve ser repintado ou não. Não precisamos nos preocupar com esta estrutura porque, neste caso, apenas o Windows fará uso da mesma. Precisamos apenas instanciá-la que depois o Windows se encarrega de inicializar seus valores. Vamos chamá-la de ps.
A estrutura RECT receberá o nome de eRet. Este tipo de estrutura define as coordenadas do canto superior esquerdo e do inferior direito de um retângulo:
typedef struct _RECT { // rc LONG left; // esquerda LONG top; // topo LONG right; // direita LONG bottom; // base } RECT;
Vamos mudar um pouco a forma do procedimento da função gerenteMensagem apenas para não ficar na mesmice:
Iniciando o processo de pintura
Quando o programa é iniciado, uma das primeiras coisas que faz é "produzir" a janela principal. Esta janela será pintada na tela, ou seja, receberá uma mensagem WM_PAINT. A partir daí, sempre que houver a necessidade de repintá-la, lhe será enviada a mesma mensagem. É aí que pegamos o gancho e solicitamos uma licença ao sistema para pintarmos nosso texto. Neste exemplo, a licença será solicitada através da chamada à função BeginPaint. Esta função, da user32.dll, prepara a janela especificada para pintura e inicializa a estrutura PAINTSTRUCT enviada com as informações necessárias:
HDC BeginPaint( HWND hwnd, // manipulador da janela LPPAINTSTRUCT lpPaint // ponteiro para a estrutura PAINTSTRUCT );
Se tudo correr bem, o sistema nos devolve o manipulador do contexto de dispositivo. Passamos então o manipulador para a nossa variável local mDC:
Obtendo a área cliente da janela
Com a função GetClientRect obtemos as coordenadas da área cliente de uma janela. Ests coordenadas especificam os cantos superior esquerdo e inferior direito da área cliente. Como as coordenadas cliente são relativas ao canto superior esquerdo de uma área cliente, as coordenadas do canto superior esquerdo são (0,0).
BOOL GetClientRect( HWND hWnd, // manipulador da janela LPRECT lpRect // endereço da estrutura para as coordenadas cliente );