c# - NativeWindow的AssignHandle没有父窗体

标签 c# winforms

我对 NativeWindow 的用途有点困惑。

我想要做的是实例化一个 NativeWindow 派生对象并使用它来监听某些 Windows 事件 - 而不是以我的一种形式监听它们。但是,我似乎明白,为了让窗口的消息泵接收消息,我需要为窗口分配一个句柄。我能找到的所有教程都涉及为窗口分配“父窗体”的句柄,这将部分地破坏我的目标(好吧,我将分离消息监听问题,但我仍然需要附加该问题到我的其中一种形式,而不是让它单独运行)。

所以,对于这个问题:

是否有一种方法可以构造一个 NativeWindow,使其能够在其消息泵中接收系统事件而不必使其成为另一种形式的“子级”

最佳答案

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

正确实现NativeWindow

感谢Sinatr为我指明了正确的方向。 This thread对于仅消息窗口问题有一个很好的解决方案。我用它作为我的窗口的基类。

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

我想听的消息是 USB 通知,我关注了 this answer 。我的问题是我必须注册那些将句柄作为参数传递的消息...但我没有注意,最终在调用 CreateWindow() 之前这样做/em>,因此没有有效的句柄。

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

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;
}

关于c# - NativeWindow的AssignHandle没有父窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43885905/

相关文章:

c# - 关于在 session 中存储整个 LINQ 对象的想法?

C# 从 powershell 脚本获取变量

c# - 预处理器指令

c# - 控制不立即使用 INotifyPropertyChanged 更新绑定(bind)属性

c# - LINQ 延迟执行的微妙之处

c# - 如何取消关闭winform?

c# - 根据 View 中的预期设置模型

c# - 如何查询NHibernate的特定类型?

c# - 替换 Windows 窗体中默认的未处理错误对话框

c# - 不关闭表单的 DialogResult?