关于MFC中,非模态对话框,消息映射问题。 本帖最后由 VisualEleven 于 2012-09-11 10:48:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可不可以用消息映射来传到其它对话框可以啊,我一般是自己SendMessage再发一条消息过去。你自己再写个消息循环有何意义?? 你可以将所有需要接收消息的窗口句柄保存起来,可以保存在App类的成员变量中,作为一个类似全局变量的序列(CArray类可以满足,或者使用CMap用来保存对话框名称与窗口句柄的映射关系,方便查找)。每次需要向一个窗口发送消息时,就从保存好的句柄序列中取得一个HWND,然后使用::SendMessage向这个窗口发送消息。对应的窗口类中需要定义这个消息的响应函数,可以用ON_MESSAGE(MY_MESSAGE, MyFunction)宏来定义。像LZ这样自己写一个消息循环,是很费劲的,即使上面的错误不发生,程序也会卡死在那个button的消息循环中。 利用其它窗口的HWND句柄,SendMessage/PostMesasge()不就可以吗? 问题是不知道SendMessage/PostMesasge(),能不能详细写一下,大神,我在好多帖子里都看到你了我是初学MFC的。。谢了 afx_msg void OnRButtonDown(UINT nFlags, CPoint point);afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)ON_WM_RBUTTONDOWN()LRESULT CTestView::OnMyMessage(WPARAM wParam,LPARAM lParam){ MessageBox("这是响应自定义消息","信息提示",MB_OK); return 1;}void CTestView::OnRButtonDown(UINT nFlags, CPoint point){ char buf[15] = {"信息提示测试1"}; char buf2[15] = {"dsfdsfsdf"}; //char ch[3] = {0}; //strcpy_s_s(ch,buf); //strcpy_s(ch,buf2); ::SendMessage(AfxGetMainWnd()->m_hWnd,WM_MYMESSAGE,35,(LPARAM)buf);} 可以在每个对话框在进行操作的时候,向其他对话框发送消息#defile MSG_MESSAGE WM_USER+101ON_MESSAGE( MSG_MESSAGE, FUNCTION1)::SendMessage(AfxGetMainWnd()->m_hWnd,MSG_MESSAGE,35,(LPARAM)buf); 请问下10楼ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)ON_WM_RBUTTONDOWN()这两个 应该放在什么地方,我放的时候老提示有错误,谢谢 1.WM_MYMESSAGE是自定义的一个宏,其声明放在“Resource.h”文件中,例如:#define WM_MYMESSAGE WM_USER+10002.afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)是自定义的一个消息响应函数,在每个类的头文件中声明之,在类的.CPP文件中实现之3.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)的作用是自定义了消息映射的关系,他要放在“.CPP文件”的下列位置:BEGIN_MESSAGE_MAP(类名, 父类) // 标准打印命令 ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)END_MESSAGE_MAP()4.ON_WM_RBUTTONDOWN()的位置与.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)相同。写了半天了,给分吧 电影院点座系统(模拟多终端)的方案:1.多台计算机网络连接(实际,网络通信)2.一台计算机多个程序模拟(进程间通信)3.一台计算机一个程序多个界面模拟(消息通信 或是 全局变量<或是 多界面类的静态局部变量> 通信)看楼主的代码, 好像是3了。具体解决方案是:1. 在CDialog44类中,定义所用的CDialog1、CDialog2的指针 成员变量、 座位信息2. 在CDialog44::OnInit...(初始化消息响应函数)中new 并create 注意:Create(IDD_DIALOG1,NULL)时,将第二个参数改成 this3. 在CDialog44::OnButton1()中 ShowWindow 4. 在CDialog44类中添加一个成员函数,用各界面指针调用UpdateWindow(),更新显示5. 某界面座位信息 发生改变时, 更改parent的座位信息,调用parent中的更新显示函数。 为什么我重复调用一个按钮函数 对话框窗口会出现 (没有响应) 如何禁止其他进程运行 新手装VC6.0的问题!!!!!! 使用BT下载东西,怎样等BT任务下载完后,就关闭我的计算机,谁能给代码?? EXE文件怎样转换成DLL 数据入库问题,请帮忙给予解答 关于SystemParametersInfo Microsoft Agent的帮助文档,哪位大侠有之 JM运行突然出错 关于下载SWF文件问题 诺顿360中的sonar防护原理 共享内存与网络通信能相互结合吗?
像LZ这样自己写一个消息循环,是很费劲的,即使上面的错误不发生,程序也会卡死在那个button的消息循环中。
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
ON_WM_RBUTTONDOWN()
LRESULT CTestView::OnMyMessage(WPARAM wParam,LPARAM lParam)
{
MessageBox("这是响应自定义消息","信息提示",MB_OK);
return 1;
}void CTestView::OnRButtonDown(UINT nFlags, CPoint point)
{
char buf[15] = {"信息提示测试1"};
char buf2[15] = {"dsfdsfsdf"};
//char ch[3] = {0};
//strcpy_s_s(ch,buf);
//strcpy_s(ch,buf2);
::SendMessage(AfxGetMainWnd()->m_hWnd,WM_MYMESSAGE,35,(LPARAM)buf);
}
#defile MSG_MESSAGE WM_USER+101
ON_MESSAGE( MSG_MESSAGE, FUNCTION1)
::SendMessage(AfxGetMainWnd()->m_hWnd,MSG_MESSAGE,35,(LPARAM)buf);
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
ON_WM_RBUTTONDOWN()
这两个 应该放在什么地方,我放的时候老提示有错误,谢谢
2.afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)是自定义的一个消息响应函数,在每个类的头文件中声明之,在类的.CPP文件中实现之
3.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)的作用是自定义了消息映射的关系,他要放在“.CPP文件”的下列位置:
BEGIN_MESSAGE_MAP(类名, 父类)
// 标准打印命令
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
END_MESSAGE_MAP()
4.ON_WM_RBUTTONDOWN()的位置与.ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)相同。
写了半天了,给分吧
1.多台计算机网络连接(实际,网络通信)
2.一台计算机多个程序模拟(进程间通信)
3.一台计算机一个程序多个界面模拟(消息通信 或是 全局变量<或是 多界面类的静态局部变量> 通信)看楼主的代码, 好像是3了。
具体解决方案是:
1. 在CDialog44类中,定义所用的CDialog1、CDialog2的指针 成员变量、 座位信息
2. 在CDialog44::OnInit...(初始化消息响应函数)中new 并create
注意:Create(IDD_DIALOG1,NULL)时,将第二个参数改成 this
3. 在CDialog44::OnButton1()中 ShowWindow
4. 在CDialog44类中添加一个成员函数,用各界面指针调用UpdateWindow(),更新显示
5. 某界面座位信息 发生改变时, 更改parent的座位信息,调用parent中的更新显示函数。