SendMessage函数

SendMessage函数首先我们了解一下 Windows 的消息机制 Windows 是一个消息驱动式系统 Windows 消息提供应用程序与应用程序之间 应用程序与 Windows 系统之间进行通信的手段 举个例子 打开记事本程序 该程序有一个 文件 菜单 那么 在运行该程序的时候 如果用户单击 文件菜单

 首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。
举个例子,打开记事本程序,该程序有一个 “文件“菜单。 那么,在运行该程序的时候,如果用户单击“文件菜单“里的“新建“命令, 这个动作将被Windows所捕捉,Windows经过分析得知这个动作应该由我们打开的记事本程序所来处理,然后Windows就发送个消息 譬如我们编程的时候有时用到的 WM_COMMAND的消息给记事本,然后记事本就把这个消息处理掉。 这个过程就是消息处理。

 

函数原型 :LRESULT SendMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);

 

参数:

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

      wMsg 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量.

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

知它有关电源管理事件
WM_DEVICECHANGE 当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_MDIDESTROY 应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口
WM_MDIACTIVATE 应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它
WM_MDIRESTORE 程序 发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT 程序 发送此消息给MDI客户窗口激活下一个或前一个窗口
WM_MDIMAXIMIZE 程序发送此消息给MDI客户窗口来最大化一个MDI子窗口
WM_MDITILE 程序 发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE 程序 发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口
WM_MDIICONARRANGE 程序 发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE 程序 发送此消息给MDI客户窗口来找到激活的子窗口的句柄
WM_MDISETMENU 程序 发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_CUT 程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY 程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE 程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR 程序发送此消息给editcontrol或combobox清除当前选择的内容
WM_UNDO 程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_DESTROYCLIPBOARD 当调用ENPTYCLIPBOARD函数时 发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD 当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口 它允许用剪贴板观察窗口来显示剪贴板的新内容
WM_PAINTCLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画
WM_SIZECLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者
WM_ASKCBformATNAME 通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN 当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口
WM_HSCROLLCLIPBOARD 此消息通过一个剪贴板观察窗口发送给剪贴板的所有者 它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上 所有者应滚动剪贴板图象并更新滚动条的值
WM_QUERYNEWPALETTE 此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板
WM_PALETTEISCHANGING 当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序
WM_PALETTECHANGED 此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板
WM_HOTKEY 当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息
WM_PRINT 应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分



























Buttons

BM_CLICK button被点击 消息

BM_GETCHECK 用于check boxes 或radio boxes 。查看 是否 checked 了。

BM_GETSTATE 发送此消息,可返回 button 的状态,如 是否被 checked;是否 可用(不可用就 变灰了)

BM_SETCHECK 如果 已经 checked 了,发送此消息后,变为 unchecked,就是 那个钩钩 没被 选上。ok?

BM_SETSTATE 设置 button被 点击 状态。

====================

Combo Boxes

CB_ADDSTRING 添加 字符串到 Combo Boxes 。

CB_DELETESTRING 删除 Combo Boxes 中的 条目,既 item

CB_GETCOUNT 得到 Combo Boxes 条目 item 的 数目

CB_GETCURSEL 返回 Combo Boxes 中被选 条目 在 Combo Boxes 中 的位置,第一条为0 。

如果 没有 条目或出错,则返回 -1

CB_GETDROPPEDSTATE 发送此消息,可判断 Combo Boxes 的list box 是否被 放下,如果 是,返回 非零值,不是,则 返回 0

CB_GETLBTEXT 得到 combo box 的 条目 的text。 返回值 是 这个text 的长度。

CB_GETLBTEXTLEN 返回值 是 条目的 text 的长度。

CB_INSERTSTRING 插入 字符串 条目到 combo box 中

CB_RESETCONTENT 清空 combo box 所有条目

CB_SETCURSEL 设置 combo box 被选 条目。

CB_SHOWDROPDOWN 让 combo box 的listbox 下拉。 既 显出 所有 条目

===================

Edit Controls

EM_CANUNDO 决定 上一次操作 是否可以 undo (撤消操作)。如果可以,则可发送 EM_undo

EM_GETFIRSTVISIBLELINE 在 multi-line 控件中,找到 最上层的 可见的 行号。次行号是相对于 所有行的。

EM_GETPASSWORDCHAR 返回 密码框的 字符集。既 是查看密码。

EM_GETSEL 返回在 可编辑 控件中 ,被选择(HIGHLIGHT高量选择)的字符集 的 起点 和终点的 位置。

用 sendmessage 的wParam 参数 返回 起点位置,lParam 返回 终点位置

EM_REPLACESEL 用不同的字符串 替换 可编辑 控件 中的 字符串,如果 可编辑 控件中 没有 字符串,则 此消息变为 添加 字符串

EM_SETPASSWORDCHAR 在可编辑 控件中 设置 密码字符集 ,既 用* 代替

EM_UNDO 发送 操作 撤消 消息。

======================

IP Address Control

===================

IPM_CLEARADDRESS 清除 IP 地址控件(IP Address control)的内容

IPM_GETADDRESS 从IP 地址控件 获得 存储在 它中的 IP 地址 信息/

IPM_ISBLANK 决定 IP 地址控件 是否可以为 空值。既 127.0.0.1 之类的地址 为 空。

IPM_SETADDRESS 在 IP 地址控件中设置 IP 地址。

IPM_SETFOCUS 在 IP 地址控件中,当需要输入 IP 地址时, 使之获得 键盘输入 焦点

IPM_SETRANGE 设置 输入IP 地址的有效范围

=====================

Media Control Interface (MCI)

=============================

MM_MCINOTIFY 告诉 窗体 MCI 命令 完成的状态. 这个 状态包括 success, failure, 或 其它事件

Menus

=============================

WM_COMMAND 当 用户 选择 菜单中的 项目后,将向 窗体 发送此消息. 窗体 受到 此消息后,再 决定 下一个 行为

WM_INITMENU 当 菜单 准备 显示 前,向 窗体发送 此消息, 窗体 将 初始化 菜单 项.

WM_SYSCOMMAND 向 窗体 发送 用户点击 系统菜单 消息. 窗体将 响应 这个消息 ,决定 下个 行为.

================

Windows

=====================

WM_CLOSE 发送 让窗体关闭的消息,有些窗体会 在此时 弹出个 关闭对话框。

WM_GETTEXT 返回 窗体 标题栏 (caption 属性)。 需要先 用WM_GETTEXTLENGTH 获得 字符串长度

WM_GETTEXTLENGTH 见上!

WM_HELP 发送此 消息后,将 显示 指定的 HELP 文件

WM_SETTEXT 设置 窗体 标题栏 。

==============================

List Boxes

===============

LB_ADDSTRING 在条目中添加 字符串

LB_DELETESTRING 删除一个 条目. 条目 序号是从 0 开始的.

LB_GETCOUNT 得到 条目总数.

LB_GETCURSEL 得到 单选 的list box 的 选项条目的 序号

LB_GETSEL 判断 list 的 条目 是否被选上, 如果 选上了,则返回 >0 的值.否则 返回 0 ,表示 用户没选择条目

LB_GETSELCOUNT 获得 可多选 的list , 被用户选择的条目的个数.

LB_GETSELITEMS 返回 可多选的list 的 被选条目的 序号. 可返回 数组.

LB_GETTEXT 得到 list中的 一个 条目的 text 值

LB_GETTEXTLEN 得到 list中的 一个 条目的 text 值的长度

LB_INSERTSTRING 在list 中,插入 一个条目。如果成功,将返回 插入后,此条目的序号。

LB_RESETCONTENT 清空 所有的 list 中的 条目。

LB_SETCURSEL 对单选 的list box, 设定 用户 选择条目的 具体值

LB_SETSEL 对多选 的list box, 设定 用户 选择条目的 具体值

=======================================================

Mouse

==================

WM_LBUTTONDBLCLK 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已双击 。返回值 0

WM_LBUTTONDOWN 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已点击,返回值 0

WM_LBUTTONUP 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已释放,返回值 0

WM_MBUTTONDBLCLK 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已双击 。返回值 0

WM_MBUTTONDOWN 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已点击,返回值 0

WM_MBUTTONUP 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已释放,返回值 0

SendMessage(HWND, CB_SHOWDROPDOWN, -1, -1) ‘显示Combo1.hwnd下拉列表

SendMessage (Combo1.hWnd, CB_SHOWDROPDOWN, 0, 0 )    ‘不下拉

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209697.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:37
下一篇 2026年3月19日 上午8:37


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号