小甲鱼 发表于 2016-2-17 23:53:11

SendMessageCallback

函数功能:

SendMessageCallback 函数发送指定消息给一个或多个窗口。

SendMessageCallback 函数调用指定的窗口过程并立即返回(尽管窗口属于另一个线程,依旧可以立即返回)。当窗口过程处理完消息后,系统调用 lpCallBack 参数指定的回调函数,将消息处理的结果和一个应用程序定义的值传给回调函数。


API 函数原型:

BOOL WINAPI SendMessageCallback(
_In_ HWND          hWnd,
_In_ UINT          Msg,
_In_ WPARAM      wParam,
_In_ LPARAM      lParam,
_In_ SENDASYNCPROC lpCallBack,
_In_ ULONG_PTR   dwData
);

参数解析:


参数 含义
hWnd 1. 指定接收消息的窗口句柄
2. 如果该参数的值是 HWND_BROADCAST((HWND)0xffff),那么消息将发送给所有的顶层窗口(包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息就是不发送给子窗口)
Msg 1. 指定将被发送的消息
2. 请参考:Windows 常用消息及含义
wParam 消息的附加信息
lParam 消息的附加信息
lpCallBack 1. 指向一个回调函数的指针,系统将在窗口过程处理完消息之后调用它
2. 如果 hWnd 参数的值是 HWND_BROADCAST((HWND)0xffff),系统将每个顶层窗口调用一次 SendAsyncProc 函数
dwData 一个应用程序定义的值,将发送给 lpCallBack 参数指定的回调函数


返回值:

1. 如果函数调用成功,返回值是非 0;

2. 如果函数调用失败,返回值是 0。


备注:

1. 如果目标窗口属于同一个线程的话,那么窗口过程将同步被调用,并且在窗口过程返回后立即调用 lpCallBack 参数指定的回调函数。如果目标窗口属于一个不同的线程,那么只有当调用 SendMessageCallback 函数的同时调用 GetMessage、PeekMessage 或 WaitMessage 函数,那么回调函数才会被调用。

2. 如果发送一个范围低于 WM_USER 的消息给异步消息函数(PostMessage、SendNotifyMessage 或 SendMessageCallback),它的消息参数不能包含指针。否则,操作将失败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放。

3. 对于需要使用 HWND_BROADCAST 通信的应用程序,应当调用 RegisterWindowMessage 函数来为应用程序间的通信取得一个唯一的消息。

4. 系统只对系统级的消息(0 ~ WM_USER-1)进行封送处理。发送自定义消息(>= WM_USER)到另一个进程,你需要自己对消息进行封送处理。

【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

页: [1]
查看完整版本: SendMessageCallback