用户控件有没有接收父窗体wndproc的方法?
我正在制作标题栏用户控件,我想接收有关窗体大小调整的 Windows 消息。
(这种形式是formborderstyle=none。)
最佳答案
因为 WndProc
函数不会拦截所有窗口消息,所以我习惯于创建一个 MessageFilter
,因为它确实会过滤每条窗口消息。因此,首先您创建一个新类,它将实现接口(interface) IMessageFilter
。
class MessageFilter : IMessageFilter
{
public static IntPtr MyHandle { get; set; }
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == /*windows code for resizing*/ && m.HWnd == MyHandle)
{
//do what you desire
return true;
}
else
return false;
}
}
因此您过滤所有消息并等待消息包含调整大小的代码并且该代码针对您的特定窗口。在 Windows 中,所有控件(如按钮、表单...)都有一个唯一的句柄。该句柄用于告知将windows消息外壳发送到哪个特定控件,因此我们可以将其作为调整大小检测的标准。
MyHandle
shell 包含您要收听其调整大小的窗体的窗口句柄。所以你应该设置它,例如在构造函数中:
MessageFilter.MyHandle = this.Handle;
现在我们创建了我们自己的 MessageFilter
,现在我们必须将它添加到您的应用程序中,以便它监听 Windows 消息。这应该在构造函数中设置。
MessageFilter msgFilter = new MessageFilter();
Application.AddMessageFilter(msgFilter);
关于c# - 如何拦截用户控件中父窗体的wndproc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49004438/