关于SendMessage

本文是对MSDN中关于SendMessage的翻译与小结。

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

.函数原型:

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

.参数:

hWnd

窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。

Msg

指定被发送的消息;

wParam

指定附加消息的特定信息;

lParam

指定附加消息的特定信息。

.返回值:

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

.备注:

需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。

如果指定的窗口通过调用线程被创建,则窗口过程作为子程序被立即调用。如果指定的窗口通过调用不同线程被创建,则系统切换到该线程并调用适当的窗口过程。线程间的消息只有在接收线程执行消息检索代码时才被处理。发送线程将被阻塞到接收线程处理完消息为止。

Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用SendMessage函数之前,应检查发送的消息是否被Windows CE所支持。

.使用环境:

Windows NT: 3.1及以上版本;

Windows:95及以上版本;

Windows CE:1.0及以上版本;

头文件:winuser.h;

输入库:user32.lib;

Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。

.示例代码:

 
01. case WM_KEYDOWN:
02.         switch (wParam)
03.         {
04.         case VK_HOME:
05.              SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
06.              break ;
07.   
08.         case VK_END:
09.              SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;
10.              break ;
11.   
12.         case VK_PRIOR:
13.              SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;
14.              break ;
15.         ...
16.         }
17.         return 0 ;
18.     ...

.常见问题

1)使用SendMessage来实现剪切、复制和粘贴

1. SendMessage(hwnd, WM_COPY, 0, 0);
2. SendMessage(hwnd, WM_CUT, 0, 0);
3. SendMessage(hwnd, WM_PASTE, 0, 0);

2)SendMessage与PostMessage的区别

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

3)SendMessage发送WM_COPYDATA消息在进程间传送数据

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

例如:

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

(全文完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值