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,

 

 

posted on 2008-11-20 19:02  oskycar  阅读(3878)  评论(0编辑  收藏  举报

导航