gpt4 book ai didi

c# - 将 WM_GETFONT 与标准平面样式一起使用时出现问题

转载 作者:可可西里 更新时间:2023-11-01 10:29:15 25 4
gpt4 key购买 nike

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

当我尝试 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#。

最佳答案

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

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

The return value is a handle to the font used by the control, or NULL if the control is using the system font.

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


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

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

如果您正在发送 WM_SETFONT 消息,您可能忘记告诉控件它应该重绘自己。同样,从上面链接的文档中提取:

lParam

The low-order word of lParam specifies whether the control should be redrawn immediately upon setting the font. If this parameter is TRUE, the control redraws itself.

关于c# - 将 WM_GETFONT 与标准平面样式一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com