使用WM_GETFONT和标准flatstyle的问题

时间:2010-12-31 11:11:41

标签: c# .net windows winapi fonts

我正在尝试在其他应用程序中获取按钮的字体。

当我尝试WM_GETFONT时,它会返回0.这是我的代码:

[DllImport("User32.DLL")] public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 

IntPtr fx = SendMessage(button1.Handle, 0x31, 0, 0); 

我已经知道问题的原因,这是由于FlatStyle属性

请参阅此链接

http://www.siao2.com/2008/09/26/8965526.aspx

我该如何解决这个问题?

我在Windows 7下使用C#。

1 个答案:

答案 0 :(得分:2)

您正在获取该值,因为您正在检查的控件使用默认的系统字体。
如果未明确指定自定义字体,则这些正是这些值你应该期待。

如果使用默认系统字体绘制控件的文本,则WM_GETFONT消息将始终返回0(或NULL)。根据{{​​3}}:

  

返回值是控件使用的字体的句柄,如果控件使用系统字体,则返回NULL。

同样适用于GetTextFace功能。在这种情况下,相关documentation的文档提供了一些明确的见解:如果wParam值为NULL,则控件将使用默认系统字体来绘制其文本。


显然你没有更改字体,或者至少Windows认为你没有。您提到您正在尝试获取其他应用程序的字体 - 您如何更改用于在另一个应用程序中的控件上绘制文本的字体?

如果您更改默认系统字体,则无论您在屏幕上看到的内容是否不同,上述行为仍然适用。

如果您要发送WM_SETFONT消息,您可能忘记告诉控件它应该重绘自己。再次,从链接到上面的文档:

  

lParam的

     
  lParam的低位字指定控件是否应该   设置后立即重新绘制   字体。如果此参数为TRUE,   控件重绘自己。