如何使用C ++将事件处理程序添加到新创建的窗口?
_hWnd = CreateWindow( NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL );
它是一个虚拟窗口,除了等待WM_DEVICECHANGE
事件之外什么也不做,而是使用RegisterDeviceNotification
进行注册。如何将事件处理程序附加到此窗口?我正在使用Visual Studio 2008.谢谢。
答案 0 :(得分:3)
您可以通过使用SetWindowLongPtr
和GWL_WNDPROC
标记设置窗口过程来完成此操作。
SetWindowLongPtr(_hWnd, GWL_WNDPROC, myWndProc);
答案 1 :(得分:2)
您需要使用RegisterClass
将窗口过程与窗口类相关联,然后使用此类创建窗口。它是处理所有消息的窗口过程 - Win32中没有“事件处理程序”机制。
答案 2 :(得分:2)
除了其他人所说的,在创建隐藏窗口以接收消息时,请考虑使用CreateWindowEx()
,而hWndParent
参数设置为HWND_MESSAGE
。请参阅MSDN for more info。
答案 3 :(得分:0)
至少通常,您首先调用RegisterClass
,它指定该类窗口的窗口过程。然后,在致电CreateWindow
时指定班级。
答案 4 :(得分:0)
您可能不必仅为处理此消息而创建单独的窗口。
我提到这一点是因为大多数Windows应用程序已经创建了一个窗口,您只需要将WM_DEVICECHANGE消息的处理添加到主窗口的窗口过程中。
如果您的应用程序作为Windows服务(守护程序)运行,您还可以在service control handler中接收设备更改通知。
如果您的应用程序是控制台模式应用程序,则可以fetch the handle to it's window和subclass it添加WM_DEVICECHANGE消息的处理。
玩得开心!