SendMessage的使用
最近做东西的时候想如何去发送一个模拟的菜单命令.比如说发现文档为空的时候就发送一个打开文件的命令.而不用再去点击文件-打开:.
经高手指点终于了解到用sendmessage就可以实现.
定义
SendMessage函数功能描述:将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回。
.函数原型:
LRESULT SendMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 被发送的消息
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);
.参数:
hWnd
窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。
Msg
指定被发送的消息;
wParam
指定附加消息的特定信息;
lParam
指定附加消息的特定信息。
.返回值:
返回值返回消息处理的结果,其依赖于所发送的消息。
具体应用:
说明:传入的UINT Msg消息决定了响应的消息类型.入系统消息采用的是"WM_VSCROLL"类似的命令,且无需指定附加消息.
而 菜单命令均采用的是WMCOMMAND.并且需要在附加消息里面指定菜单的命令ID.
例如:
1、发送系统命令实现复制 粘贴功能.
SendMessage(hwnd, WM_COPY, 0, 0);
SendMessage(hwnd, WM_CUT, 0, 0);
SendMessage(hwnd, WM_PASTE, 0, 0);
2、发送菜单命令
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_COMMAND,ID_TOOL_TEXTTIPS,NULL);
最重要的菜单消息是WM_COMMAND,它表示使用者已经从菜单中选中了一个被启用的菜单项。当然WM_COMMAND消息也可以由子窗口控件产生。
如果您碰巧为菜单和子窗口控件使用同一ID码,那么您可以通过lParam的值来区别它们,菜单项的lParam其值为0,