• 1.摘要
  • 2.基本信息
  • 3.主要功能
  • 4.参数原型
  • 4.1.参数
  • 4.2.举例说明
  • 5.编辑控件
  • 5.1.编辑风格消息
  • 5.2.列表框操作
  • 5.3.组合框操作
  • 5.4.常用窗口消息
  • 5.5.按钮消息
  • 5.6.消息接收

SendMessage

SendMessage是一个函数,该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。要实现sendmessage发送消息的接收,可在消息的接收方覆写DefWindowProc,该方法即可接收到sendmessage方法发送来的消息。因为sendmessage发送的消息,不再经过消息队列,而是直接发送给指定对象。所以一般的消息响应,包括PreTranslateMessage方法都无法接收到该信息,只能通过覆写DefWindowProc方法来接收信息。

基本信息

  • 外文名

    SendMessage

  • 声明位置

    WinUser.h

  • 定义

    消息发送到一个或多个窗口

  • 应用

    WinUser.h

主要功能

该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。

参数原型

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

参数

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

Msg:指定被发送的消息。

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

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

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

备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。

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

WindowsCE:WindowsCE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。

速查:WindowsNT:3.1及以上版本:Windows:95及以上版本;WindowsCE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在WindowsNT环境下以Unicode和ANSI方式实现。

SendMessage函数使用实例

程序控制拉下或收起组合框的下拉列来。

一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。

在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。

举例说明