应该怎么发送.MFC中没有定义保存发送消息如:SendMessage( ,WM_CLOSE,,), WM_CLOSE表示关闭.
但是,没有保存的消息(像:WM_CLOSE)代码.应该怎么样定义消息.
希望给出具体步骤..谢谢...
15 个解决方案
#1
可以利用自定义消息实现,sendmessage函数可以发送自定义消息。
#2
如果是别人的程序恐怕要用HOOK实现了。
#3
自定义消息WM_USER+X ,然后再接收消息的窗口手动添加响应消息函数就OK了
#4
可以发送命令消息:SendMessage(
HWND hWnd, // 窗口句柄
UINT Msg, // 这个参数写 WM_COMMOND
WPARAM wParam, // 自定义消息WM_USER+X
LPARAM lParam // 参数 高位+低位
);
HWND hWnd, // 窗口句柄
UINT Msg, // 这个参数写 WM_COMMOND
WPARAM wParam, // 自定义消息WM_USER+X
LPARAM lParam // 参数 高位+低位
);
#5
保存消息,得看程序有没有以及怎么实现的,没有标准的Windows保存消息啊。一般MFC程序可以尝试用ID_FILE_SAVE这个命令ID。
#6
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)
如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。
如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。
如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
#7
如果不是VC编写的呢,比如:Delphi编写的呢.
#8
别人的程序就用FindWindowEx找到句柄后再SendMessage得了
#9
自己的程序..如果在自定义消息的话.最好写详细点呢...SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL) 我试过了呢..没什么改变...
#10
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)中的hWnd是哪个的句柄??菜单?按钮?还是哪个窗口?
#11
主窗口的句柄
SendMessage(AfxGetMainWnd()->m_hWnd, WM_COMMAND, ID_FILE_SAVE, 0);
或者直接
AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_SAVE);
SendMessage(AfxGetMainWnd()->m_hWnd, WM_COMMAND, ID_FILE_SAVE, 0);
或者直接
AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_SAVE);
#12
晕,这么简单的问题还问!
直接给你贴代码算了!
#define WM_SAVE WM_USER+1
在点击保存按钮的响应事件中添加
SendMessage(hwnd,WM_SAVE,0,0);//hwnd为接收消息的窗口句柄
在消息处理程序中添加(一般都是回调函数,由操作系统调用)
case WM_SAVE:
SaveFileToDisk();//该函数自己定义,怎么实现我想你应该知道,很简单
return 0;
直接给你贴代码算了!
#define WM_SAVE WM_USER+1
在点击保存按钮的响应事件中添加
SendMessage(hwnd,WM_SAVE,0,0);//hwnd为接收消息的窗口句柄
在消息处理程序中添加(一般都是回调函数,由操作系统调用)
case WM_SAVE:
SaveFileToDisk();//该函数自己定义,怎么实现我想你应该知道,很简单
return 0;
#13
可以的,用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.
这样写:
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.
#14
不好意思,写错了一点不是BN_CLICK而是BN_CLICKED,按钮的点击消息啊,对菜单也可以这样做
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICKED),NULL);
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICKED),NULL);
#15
刚刚测试完成正确可用的代码
::SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(XXXX,BN_CLICKED),NULL);
XXXX可以是菜单标识如数字123,也可以是菜单的ID_XXXX这样的形式
如果是ID_XXX的形式需要详细的进行预定义
::SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(XXXX,BN_CLICKED),NULL);
XXXX可以是菜单标识如数字123,也可以是菜单的ID_XXXX这样的形式
如果是ID_XXX的形式需要详细的进行预定义
#1
可以利用自定义消息实现,sendmessage函数可以发送自定义消息。
#2
如果是别人的程序恐怕要用HOOK实现了。
#3
自定义消息WM_USER+X ,然后再接收消息的窗口手动添加响应消息函数就OK了
#4
可以发送命令消息:SendMessage(
HWND hWnd, // 窗口句柄
UINT Msg, // 这个参数写 WM_COMMOND
WPARAM wParam, // 自定义消息WM_USER+X
LPARAM lParam // 参数 高位+低位
);
HWND hWnd, // 窗口句柄
UINT Msg, // 这个参数写 WM_COMMOND
WPARAM wParam, // 自定义消息WM_USER+X
LPARAM lParam // 参数 高位+低位
);
#5
保存消息,得看程序有没有以及怎么实现的,没有标准的Windows保存消息啊。一般MFC程序可以尝试用ID_FILE_SAVE这个命令ID。
#6
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)
如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。
如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
如果是自己的程序,直接从资源查找到相应得ID,MFC程序默认是ID_FILE_SAVE,0xE103,57603。
如果是别人的程序,那必须要是特定的程序,没有源码的话可以按下面的步骤找:在VC里打开目标exe文件,在Open对话框的Open As选项上选Resources, 这样就可以打开程序的资源,然后找到菜单项,可以查到相应菜单命令ID
#7
如果不是VC编写的呢,比如:Delphi编写的呢.
#8
别人的程序就用FindWindowEx找到句柄后再SendMessage得了
#9
自己的程序..如果在自定义消息的话.最好写详细点呢...SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL) 我试过了呢..没什么改变...
#10
SendMessage( hwnd, WM_COMMAND, ID_xxx, NULL)中的hWnd是哪个的句柄??菜单?按钮?还是哪个窗口?
#11
主窗口的句柄
SendMessage(AfxGetMainWnd()->m_hWnd, WM_COMMAND, ID_FILE_SAVE, 0);
或者直接
AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_SAVE);
SendMessage(AfxGetMainWnd()->m_hWnd, WM_COMMAND, ID_FILE_SAVE, 0);
或者直接
AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_SAVE);
#12
晕,这么简单的问题还问!
直接给你贴代码算了!
#define WM_SAVE WM_USER+1
在点击保存按钮的响应事件中添加
SendMessage(hwnd,WM_SAVE,0,0);//hwnd为接收消息的窗口句柄
在消息处理程序中添加(一般都是回调函数,由操作系统调用)
case WM_SAVE:
SaveFileToDisk();//该函数自己定义,怎么实现我想你应该知道,很简单
return 0;
直接给你贴代码算了!
#define WM_SAVE WM_USER+1
在点击保存按钮的响应事件中添加
SendMessage(hwnd,WM_SAVE,0,0);//hwnd为接收消息的窗口句柄
在消息处理程序中添加(一般都是回调函数,由操作系统调用)
case WM_SAVE:
SaveFileToDisk();//该函数自己定义,怎么实现我想你应该知道,很简单
return 0;
#13
可以的,用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.
这样写:
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.
#14
不好意思,写错了一点不是BN_CLICK而是BN_CLICKED,按钮的点击消息啊,对菜单也可以这样做
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICKED),NULL);
SendMessage(WM_COMMAND,MAKEWPARAM(ID_BUTTON,BN_CLICKED),NULL);
#15
刚刚测试完成正确可用的代码
::SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(XXXX,BN_CLICKED),NULL);
XXXX可以是菜单标识如数字123,也可以是菜单的ID_XXXX这样的形式
如果是ID_XXX的形式需要详细的进行预定义
::SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(XXXX,BN_CLICKED),NULL);
XXXX可以是菜单标识如数字123,也可以是菜单的ID_XXXX这样的形式
如果是ID_XXX的形式需要详细的进行预定义