您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:357 来源:vckbase.com

关于SendMessage
编译:snowapex

本文是对MSDN中关于SendMessage的翻译与小结。
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所支持。


.使用环境:
Windows NT: 3.1及以上版本;
Windows:95及以上版本;
Windows CE:1.0及以上版本;
头文件:winuser.h;
输入库:user32.lib;
Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。


.示例代码:

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

(全文完)
相关文章

初试驱动---OV511 摄像头驱动开发
定制编辑框的上下文菜单
ATL布幔之下的秘密(5)
如何在NT下获取进程的路径
如何更改其它程序 ListView 控件中某个 Ite
利用辅助线程更新用户界面UI
一个简单的读写注册表实例
COM 组件设计与应用(十)——IDispatch 接
MFC程序员的WTL指南: Part II - WTL 界面基
用VC 制作QQ自动登陆软件
COM 组件注册方法
枚举声明,模板函数特化
系统托盘编程完全指南(一)
点对点视频会议程序:VideoNet
乱砍设计模式之二:STATE 模式——履胡之肠
ATL 实现定制的 IE 浏览器栏、工具栏和桌面
对“仅通过崩溃地址找出源代码的出错行”一
COM插件模型浅谈
Windows 2000驱动程序的设计
MFC 编写的仿 Windows 计算器

相关评论


本文章所属分类:首页 VC++

  热门关键字: