我正在尝试在其他应用程序中获取按钮的字体。
当我尝试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#。
答案 0 :(得分:2)
您正在获取该值,因为您正在检查的控件使用默认的系统字体。
如果未明确指定自定义字体,则这些正是这些值你应该期待。
如果使用默认系统字体绘制控件的文本,则WM_GETFONT
消息将始终返回0(或NULL)。根据{{3}}:
返回值是控件使用的字体的句柄,如果控件使用系统字体,则返回NULL。
同样适用于GetTextFace
功能。在这种情况下,相关documentation的文档提供了一些明确的见解:如果wParam
值为NULL,则控件将使用默认系统字体来绘制其文本。
显然你没有更改字体,或者至少Windows认为你没有。您提到您正在尝试获取其他应用程序的字体 - 您如何更改用于在另一个应用程序中的控件上绘制文本的字体?
如果您更改默认系统字体,则无论您在屏幕上看到的内容是否不同,上述行为仍然适用。
如果您要发送WM_SETFONT
消息,您可能忘记告诉控件它应该重绘自己。再次,从链接到上面的文档:
lParam的
lParam的低位字指定控件是否应该 设置后立即重新绘制 字体。如果此参数为TRUE, 控件重绘自己。