用sendmessage发送菜单消息

buduan0 2009-05-03 07:12:57
我想用sendmessage函数发送一个保存消息.就是和我们按下了保存按钮的功能一样...
应该怎么发送.MFC中没有定义保存发送消息如:SendMessage( ,WM_CLOSE,,), WM_CLOSE表示关闭.
但是,没有保存的消息(像:WM_CLOSE)代码.应该怎么样定义消息.
希望给出具体步骤..谢谢...
...全文
1211 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
e513479333 2010-02-11
  • 打赏
  • 举报
回复
刚刚测试完成正确可用的代码
::SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(XXXX,BN_CLICKED),NULL);

XXXX可以是菜单标识如数字123,也可以是菜单的ID_XXXX这样的形式

如果是ID_XXX的形式需要详细的进行预定义
jingang_83 2009-05-05
  • 打赏
  • 举报
回复
不好意思,写错了一点不是BN_CLICK而是BN_CLICKED,按钮的点击消息啊,对菜单也可以这样做
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICKED),NULL);
jingang_83 2009-05-05
  • 打赏
  • 举报
回复
可以的,用WM_COMMAND消息就行了,记得WPARAM要2个参数的(用MAKEWPARAM就好了)
这样写:
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICK),NULL);我经常这样做的,自定义消息多麻烦啊

WM_COMMAND
wParam
The high-order word specifies the notification code if the message is from a control. If the message is from an accelerator, this value is 1. If the message is from a menu, this value is zero.
The low-order word specifies the identifier of the menu item, control, or accelerator.

lParam
Handle to the control sending the message if the message is from a control. Otherwise, this parameter is NULL.
哈利路亚1874 2009-05-04
  • 打赏
  • 举报
回复
晕,这么简单的问题还问!
直接给你贴代码算了!
#define WM_SAVE WM_USER+1

在点击保存按钮的响应事件中添加
SendMessage(hwnd,WM_SAVE,0,0);//hwnd为接收消息的窗口句柄

在消息处理程序中添加(一般都是回调函数,由操作系统调用)
case WM_SAVE:
SaveFileToDisk();//该函数自己定义,怎么实现我想你应该知道,很简单
return 0;
zhangyan_wt 2009-05-04
  • 打赏
  • 举报
回复
主窗口的句柄
SendMessage(AfxGetMainWnd()->m_hWnd, WM_COMMAND, ID_FILE_SAVE, 0);
或者直接
AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_SAVE);
buduan0 2009-05-04
  • 打赏
  • 举报
回复
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)中的hWnd是哪个的句柄??菜单?按钮?还是哪个窗口?
buduan0 2009-05-04
  • 打赏
  • 举报
回复
自己的程序..如果在自定义消息的话.最好写详细点呢...SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL) 我试过了呢..没什么改变...
biweilun 2009-05-03
  • 打赏
  • 举报
回复
别人的程序就用FindWindowEx找到句柄后再SendMessage得了
东方之珠 2009-05-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangyan_wt 的回复:]
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)

如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。

如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
[/Quote]

如果不是VC编写的呢,比如:Delphi编写的呢.
zhangyan_wt 2009-05-03
  • 打赏
  • 举报
回复
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)

如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。

如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
菜牛 2009-05-03
  • 打赏
  • 举报
回复
保存消息,得看程序有没有以及怎么实现的,没有标准的Windows保存消息啊。一般MFC程序可以尝试用ID_FILE_SAVE这个命令ID。
码侬 2009-05-03
  • 打赏
  • 举报
回复
可以发送命令消息:SendMessage(
HWND hWnd, // 窗口句柄
UINT Msg, // 这个参数写 WM_COMMOND
WPARAM wParam, // 自定义消息WM_USER+X
LPARAM lParam // 参数 高位+低位
);
ccpaishi 2009-05-03
  • 打赏
  • 举报
回复
自定义消息WM_USER+X ,然后再接收消息的窗口手动添加响应消息函数就OK了
东方之珠 2009-05-03
  • 打赏
  • 举报
回复
如果是别人的程序恐怕要用HOOK实现了。
东方之珠 2009-05-03
  • 打赏
  • 举报
回复
可以利用自定义消息实现,sendmessage函数可以发送自定义消息。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧