Pergunta

Em um aplicativo Win32 GUI que eu preciso para determinar a largura da área ocupada por uma corda em um botão da barra de ferramentas para que eu ajustar a largura do botão em conformidade. A barra de ferramentas é simples classe janelas ToolbarWindow32 idade. Eu uso o seguinte código:

 HDC dc = GetDC( toolbarWindowHandle );
 SIZE size;
 GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );

Para alguns string fixa (dizer "Olá") size.cx é preenchido com digamos 72, mas quando eu faço um screenshot da barra de ferramentas com a mesma seqüência de caracteres exibida em um botão vejo que a string ocupa dizer 56 pixels.

A diferença depende claramente configurações fontes do sistema. Eu uso "grandes fontes" e o valor obtido pelo código é maior do que o que está ocupada na tela. Em máquinas com "fontes pequenas" o valor obtido é menor.

Eu pensei que se eu usar GetTextExtentPoint32 () em um contexto de dispositivo janela que irá retornar exatamente o tamanho certo. O que estou fazendo de errado?

Foi útil?

Solução

A fonte usada pela barra de ferramentas não será selecionado para o DC então você precisa descobrir o que tipo de letra que está usando, criar uma cópia, selecione-o na DC, obter o tamanho e, em seguida, selecione a fonte para fora (senão você pode acabar com um vazamento de recursos). Você irá atualmente estar recebendo o tamanho do sistema de fontes espero, ou qualquer que seja a fonte padrão DC é.

Você poderia tentar encontrar a alça fonte usada, enviando uma mensagem WM_GETFONT para a janela de barra de ferramentas, mas isso não é garantido para retornar a fonte real usado quando o texto é exibido. Tudo depende de como a barra de ferramentas funciona internamente.

No entanto, eu tenho certeza que a barra de ferramentas Win32 usa a fonte do menu para processamento de texto botão, que pode ser descoberto usando uma combinação de SystemParametersInfo ea estrutura NONCLIENTMETRICS.

Se eu estava no trabalho que eu ia postar algum código.

Você apenas não ama Win32?

BTW, eu uso o recurso de botão da barra de texto e nunca tive de tamanho no botão com a mão desta forma.

http://msdn.microsoft.com/ en-us / library / ms724947 (VS.85) .aspx http://msdn.microsoft.com/en-us /library/ms724506(VS.85).asp

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top