Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在windows c++;应用程序_C++_Windows - Fatal编程技术网

C++ 在windows c++;应用程序

C++ 在windows c++;应用程序,c++,windows,C++,Windows,我正在编写一些代码,希望能够处理任何窗口,例如通过WindowsAPI、MFC、wxWidgets等创建的窗口 问题是,对于某些事情,我需要使用创建窗口的同一线程,在许多情况下,它只是位于消息循环中 我的第一个想法是向窗口发送一条回调消息,当它使用某个参数和某种函数指针接收到消息时,窗口将调用代码中的函数。但是,似乎没有标准的windows消息来执行此操作,而且我无法创建自己的消息,因为我无法控制windows代码,因此无法将所需的代码添加到消息处理程序以实现回调 有没有其他方法可以让创建窗口的

我正在编写一些代码,希望能够处理任何窗口,例如通过WindowsAPI、MFC、wxWidgets等创建的窗口

问题是,对于某些事情,我需要使用创建窗口的同一线程,在许多情况下,它只是位于消息循环中

我的第一个想法是向窗口发送一条回调消息,当它使用某个参数和某种函数指针接收到消息时,窗口将调用代码中的函数。但是,似乎没有标准的windows消息来执行此操作,而且我无法创建自己的消息,因为我无法控制windows代码,因此无法将所需的代码添加到消息处理程序以实现回调

有没有其他方法可以让创建窗口的线程进入我的函数

编辑: John Z建议我挂上windows消息。如果我这样做,是否有某种方法可以获取自定义消息的“ID”,而不会与窗口中已有的任何自定义消息发生冲突

我可能会的

WM_CALLBACK = WM_APP+1
但是如果我挂的窗口已经用WM_APP+1做了一些事情,我会遇到问题

编辑2:
刚找到RegisterWindowMessage:)

如果您与窗口处于同一进程中,则可以通过对其子类化来钩住其消息。退房

关键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); 

除了子类化之外,还可以使用调用窗口线程中的函数

VOID CALLBACK Function(      
HWND hwnd,
UINT uMsg,
UINT_PTR idEvent,
DWORD dwTime
)
{
  // stuff
}

SetTimer(hWnd, event, 0, Function);