使用C ++将事件处理程序添加到新创建的窗口

时间:2010-11-02 17:02:51

标签: c++ windows event-handling winapi

如何使用C ++将事件处理程序添加到新创建的窗口?

_hWnd = CreateWindow( NULL, NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL );

它是一个虚拟窗口,除了等待WM_DEVICECHANGE事件之外什么也不做,而是使用RegisterDeviceNotification进行注册。如何将事件处理程序附加到此窗口?我正在使用Visual Studio 2008.谢谢。

5 个答案:

答案 0 :(得分:3)

您可以通过使用SetWindowLongPtrGWL_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 windowsubclass it添加WM_DEVICECHANGE消息的处理。

玩得开心!