请教MFC不同界面之间通过消息通信的问题?

crazy_夜 2017-06-28 06:08:13
首先基于CPropertyPage和CPropertySheet类创建了如下的界面:

现在测试按下主界面中按钮“关闭电脑”,触发CameraCtrl子界面中Button1按钮按下的功能。
主界面中“关闭电脑”按钮的触发响应函数为

子界面中Button1按钮按下触发响应函数为

程序运行,在子界面Button1按钮触发响应函数体内打一断点,按钮按下的消息的确有效应,但子界面EDIT控件中并未显示任何东西。

...全文
621 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
好大一个土豆 2017-06-30
  • 打赏
  • 举报
回复
引用 15 楼 zhoujielunzhimi 的回复:

	if (msheet.mCameraCtrl.GetSafeHwnd())
	{
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);
	}
我勒个去,这貌似是一种诡异的不靠谱的做法。 通过发消息模拟点击,手段拙劣。 貌似很多人都被MFC消息误导而忘记了C++最原始的东西。 既然你已经拥有了msheet,为何不通过函数调用的方式实现,简单可靠。
只是为了让它原来的做法能正常而已
sumos 2017-06-30
  • 打赏
  • 举报
回复

	if (msheet.mCameraCtrl.GetSafeHwnd())
	{
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);
	}
我勒个去,这貌似是一种诡异的不靠谱的做法。 通过发消息模拟点击,手段拙劣。 貌似很多人都被MFC消息误导而忘记了C++最原始的东西。 既然你已经拥有了msheet,为何不通过函数调用的方式实现,简单可靠。
crazy_夜 2017-06-30
  • 打赏
  • 举报
回复
引用 19 楼 好大一个土豆的回复:
msheet.mCameraCtrl.OnBnClickedButton1();
原来是这个意思,谢谢了……
好大一个土豆 2017-06-30
  • 打赏
  • 举报
回复
去掉CtestDlg类里的mCamera,CtestDlg::OnBnClickedButton1改为:
	if (msheet.mCameraCtrl.GetSafeHwnd())
	{
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);
	}
原因同10楼
crazy_夜 2017-06-30
  • 打赏
  • 举报
回复
引用 12 楼 zbzengbing 的回复:
代码方便上传么
https://pan.baidu.com/s/1eR7bkKq测试代码放在百度云了,谢谢大家!
好大一个土豆 2017-06-30
  • 打赏
  • 举报
回复
msheet.mCameraCtrl.OnBnClickedButton1();
crazy_夜 2017-06-30
  • 打赏
  • 举报
回复
引用 16 楼 好大一个土豆的回复:
[quote=引用 15 楼 zhoujielunzhimi 的回复:]

	if (msheet.mCameraCtrl.GetSafeHwnd())
	{
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);
	}
我勒个去,这貌似是一种诡异的不靠谱的做法。 通过发消息模拟点击,手段拙劣。 貌似很多人都被MFC消息误导而忘记了C++最原始的东西。 既然你已经拥有了msheet,为何不通过函数调用的方式实现,简单可靠。
只是为了让它原来的做法能正常而已[/quote] 请问函数调用的做法是怎样实现的,我有点不太理解
crazy_夜 2017-06-30
  • 打赏
  • 举报
回复
引用 15 楼 sumos的回复:

	if (msheet.mCameraCtrl.GetSafeHwnd())
	{
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
		::PostMessageA(msheet.mCameraCtrl.GetDlgItem(IDC_BUTTON1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);
	}
我勒个去,这貌似是一种诡异的不靠谱的做法。 通过发消息模拟点击,手段拙劣。 貌似很多人都被MFC消息误导而忘记了C++最原始的东西。 既然你已经拥有了msheet,为何不通过函数调用的方式实现,简单可靠。
请问函数调用的形式应该怎么做?
好大一个土豆 2017-06-29
  • 打赏
  • 举报
回复
GetDlgItem(IDC_EDIT1) 时测试下获取到的指针是否有效?
crazy_夜 2017-06-29
  • 打赏
  • 举报
回复
引用 2 楼 zbzengbing 的回复:
直接点button1能设置成功吗
直接点有用,所以有疑问
crazy_夜 2017-06-29
  • 打赏
  • 举报
回复
直接点button1有用
好大一个土豆 2017-06-29
  • 打赏
  • 举报
回复
代码方便上传么
crazy_夜 2017-06-29
  • 打赏
  • 举报
回复
引用 10 楼 cutmelon的回复:
我猜嘛,楼主调用的mCamera和界面上那个不是同一个实例,所以代码都对,但是结果不对
应该怎么改才能实现既定的功能呢?
cutmelon 2017-06-29
  • 打赏
  • 举报
回复
我猜嘛,楼主调用的mCamera和界面上那个不是同一个实例,所以代码都对,但是结果不对
lichlichlichlich 2017-06-29
  • 打赏
  • 举报
回复
调用成功,没有更新界面,看8楼答案
zyjj_99 2017-06-29
  • 打赏
  • 举报
回复
你可以尝试另一种方案,就是自定义消息,发给CameraCtrl子界面,然后在消息响应函数中更改Edit的内容;记得UpdateData(FALSE)
crazy_夜 2017-06-29
  • 打赏
  • 举报
回复
求助……困扰我很久的问题,去过有需要我可以把程序发给各位……
crazy_夜 2017-06-29
  • 打赏
  • 举报
回复
引用 5 楼 好大一个土豆的回复:
GetDlgItem(IDC_EDIT1) 时测试下获取到的指针是否有效?
怎么测试看获取的指针
好大一个土豆 2017-06-28
  • 打赏
  • 举报
回复
直接点button1能设置成功吗
crazy_夜 2017-06-28
  • 打赏
  • 举报
回复
断点是在按下主界面“关闭电脑”按钮后进入的,这表明的确触发了CameraCtrl界面中按钮按下的消息,但为什么程序执行了,Edit控件确未显示任何东西?

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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