NativeWindow的AssignHandle没有父表单

时间:2017-05-10 07:20:08

标签: c# winforms

我对NativeWindow应该用什么感到有点困惑。

我想要做的是实例化一个NativeWindow派生的对象并使用它来侦听某些Windows事件 - 而不是在我的一个表单中监听它们。但是,我似乎明白,为了让我的窗口的消息泵接收消息,我需要为窗口分配一个句柄。我可以找到的教程都指的是为窗口分配一个"父窗体"的句柄,这将部分地击败我的目标(好吧,我可以分开听取消息的问题,但我我仍然需要将这个问题附加到我的一个表单而不是让它自己运行)。

所以,问题是:

有没有办法构建一个能够在其消息泵中接收系统事件的NativeWindow,而不必让它成为一个孩子"另一种形式

1 个答案:

答案 0 :(得分:2)

我终于能够解决我的问题了。我的问题有两个:使用NativeWindow本身和USB通知。

正确实施NativeWindow

感谢 Sinatr 指出我正确的方向。 This thread为仅消息窗口问题提供了很好的解决方案。我用它作为我窗口的基类。

接收USB通知消息 - 或任何其他需要处理的消息

我想听的消息是USB通知,我跟着this answer。我的问题是我必须注册那些传递句柄作为参数的消息......但我没有注意,最后在调用CreateWindow() 之前完成了,所以没有有效的句柄。

因此,请确保在派生类中执行类似的操作:

public override bool CreateWindow()
{
    bool retval = base.CreateWindow();
    USBNotification.RegisterUSBDeviceNotification(this.Handle);
    // or the registration to any notification you need
    // or any use you have for the handle
    return retval;
}