关于SendMessage

    技术2022-05-20  41

    SendMessage函数功能描述:将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回。

    LRESULT SendMessage(HWND hWnd, // 目标窗口句柄UINT Msg, // 被发送的消息WPARAM wParam, // 第一个消息参数LPARAM lParam // 第二个消息参数);

    .参数:hWnd窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。Msg 指定被发送的消息; wParam 指定附加消息的特定信息; lParam 指定附加消息的特定信息。

    .返回值:返回值返回消息处理的结果,其依赖于所发送的消息。

    .备注:需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。如果指定的窗口通过调用线程被创建,则窗口过程作为子程序被立即调用。如果指定的窗口通过调用不同线程被创建,则系统切换到该线程并调用适当的窗口过程。线程间的消息只有在接收线程执行消息检索代码时才被处理。发送线程将被阻塞到接收线程处理完消息为止。Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用SendMessage函数之前,应检查发送的消息是否被Windows CE所支持。

    .示例代码:

    case WM_KEYDOWN: switch (wParam) { case VK_HOME: SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ; break ; case VK_END: SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ; break ; case VK_PRIOR: SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ; break ; ... } return 0 ; ....常见问题1)使用SendMessage来实现剪切、复制和粘贴 SendMessage(hwnd, WM_COPY, 0, 0); SendMessage(hwnd, WM_CUT, 0, 0); SendMessage(hwnd, WM_PASTE, 0, 0);

    2)SendMessage与PostMessage的区别PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回

    3)SendMessage发送WM_COPYDATA消息在进程间传送数据WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。例如:

    std:string strData = "VC知识库 VCKBASE.COM"; COPYDATASTRUCT cds; cds.dwData = 0; cds.cbData = strData.Length(); cds.lpData = strData.c_str(); ::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds);

    最新回复(0)