Tamanho:
No Clipper/Harbour, imaginando um quadrado/retângulo, seria usar Left, Top, Bottom, Right
Pra obter altura e largura, só calcular:
Altura = Bottom - Top + 1
Largura = Right - Left + 1
Mas e na tela do Windows?
O pushbutton tem uma "tela" só pra ele, uma janela do Windows
Já que a janela é do Windows, perguntar direto para o Windows
wapi_GetWindowRect( ::hWnd, aWindowRect )
nWidth := Int( aWindowRect[ 3 ] - aWindowRect[ 1 ] )
nHeight := Int( aWindowRect[ 4 ] - aWindowRect[ 2 ] )
No geral é entender o conceito de como funcionam as coisas.
Pelo menos se tem uma noção do que pesquisar.
Depois:
- se o Windows tem função pra isso
- como usar a função do Windows
- como obter/enviar informações
e o principal: aonde alterar.
No fonte do pushbutton tem o SetCaption() que é a rotina que coloca a imagem.
O pushbutton sabe que janela do Windows está usando.
E o pushbutton chama a rotina de carregar imagem, e depois chama a rotina do Windows que coloca a imagem na janela, passando essa imagem.
Então... é aí mesmo.
Resta resolver duas questões:
- A imagem tem que ser menor que o pushbutton, porque precisa espaço para o contorno
- Como da outra vez acrescentei a opção de texto + imagem, quando é assim a imagem tem que ser menor ainda, pra caber o texto
Nota:
Se o fonte de tudo isso fosse em C, é provável que não conseguiria mexer.
Por isso considerei a GTWVG uma das mais promissoras, porque a gente modificar usando fonte Harbour.
O pessoal das LIBs gráficas ainda não entendeu isso direito, e a GTWVG não é exceção.
Todo controle é uma janela do Windows "sem vida", os fontes vão dizendo o que ela deve fazer.
Ao mesmo tempo, uma janela de programa já é uma janela "com vida", o fonte já faz parte dela.
A coisa é simples: estão usando a janela errada.
Estão criando controles Windows, e não controles Harbour
Se o pushbutton fosse uma janela Harbour:
Como exemplo, era só usar o DrawImage() no evento de Resize - se modificou o tamanho da janela, refaz o desenho.
Sei o conceito, mas não sei por em prática...