了解WinApi的SendMessageCallback
声明调用函数还必须调用GetMessage
,PeekMessage
或WaitMessage
来调用回调函数。< / p>
我的代码:
#include <Windows.h>
#include <iostream>
using namespace std;
VOID CALLBACK MySendAsyncProc(HWND hwnd, UINT uMsg, ULONG_PTR dwData, LRESULT lResult) {
cout << "callback" << endl;
}
int main() {
HWND hwnd = FindWindow(NULL, L"Calculator");
SendMessageCallback(hwnd, WM_SETCURSOR, (WPARAM) hwnd, MAKELPARAM(1, WM_MOUSEMOVE), MySendAsyncProc, 0);
MSG msg;
GetMessage(&msg, nullptr, 0, 0);
cout << "recieved" << endl;
return 0;
}
输出;
callback
我期望作为输出;
callback
recieved
可以肯定的是,回调函数被调用,但我如何&#34;退出&#34; GetMessage
?回调函数打印并且程序继续运行但它从不打印&#34; revieved&#34; - 我为实现我的期望做了哪些改变?
答案 0 :(得分:1)
GetMessage
等待在线程的消息队列中接收排队的消息(PostMessage
)。在此期间,它处理所有未排队的消息(来自SendMessage
和朋友),但这些消息不会导致它返回。
由于您的帖子从未发布过任何帖子,GetMessage
会一直等待。
在您的特定情况下,PeekMessage
是一个不错的选择,因为它在完成处理已发送邮件时会返回。
如果您想要暂停GetMessage
操作,MsgWaitForMultipleObjects()
会有所帮助。