我正在编写一些代码,喜欢能够使用任何窗口,如通过Windows API,MFC,WXWIDGET等创build的窗口
问题是,对于一些我需要使用创build窗口的线程,在很多情况下,只是坐在一个消息循环。
我的第一个想法是向窗口发出一个callback消息,然后当它使用某个参数和某种函数指针接收消息时,它将在我的代码中调用一个函数。 然而似乎没有一个标准的Windows消息做到这一点,我不能创build自己的消息,因为我不控制Windows代码,所以无法将所需的代码添加到消息处理程序来实现callback…
有没有其他的方式来获得创build窗口的线程进入我的function?
编辑:约翰Z sugessted,我迷上了窗口的消息。 如果我这样做,是否有一种方法来获得自定义消息的“ID”,而没有与窗口已有的任何自定义消息相冲突的风险?
我可能会这样做
WM_CALLBACK = WM_APP+1
但是,如果我挂钩的窗口已经做了WM_APP + 1,我会遇到问题。
编辑2:刚刚findRegisterWindowMessage 🙂
如果你在窗口的同一个进程中,你可以通过子类化来挂钩它的消息。 查看http://msdn.microsoft.com/en-us/library/ms633570(VS.85).aspx
关键API是SetWindowLong。
// Subclass the edit control. wpOrigEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG)EditSubclassProc); // Remove the subclass from the edit control. SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG)wpOrigEditProc);
除了子类化,您还可以使用SetTimer在窗口线程中调用一个函数。
VOID CALLBACK Function( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ) { // stuff } SetTimer(hWnd, event, 0, Function);