如何从子窗口设置/取消设置对话框复选框

问题描述 投票:0回答:1

我创建了一个 MFC cpp 对话框应用程序,该主对话框的目的之一是通过复选框控件创建和销毁多个子图形窗口。单击复选框,将发出 Create(,,,,) 消息,并弹出子图形窗口,同样取消选中该复选框,将发送

DestroyWindow()
并关闭子窗口。这一切都运行良好。

问题是:

  • 当子图形窗口从其自己的系统菜单关闭时,如何取消选中对话框复选框。
  • 或者如何将消息从子图形窗口发送回主对话框以取消选中其复选框?
c++ mfc
1个回答
0
投票

互联网上有很多示例向您展示如何使用自定义消息。甚至一些答案,例如:

MFC 向按钮发送消息(子到父)

这是实现这一目标的一种方法。另一种选择是在弹出窗口关闭时在相应的事件处理程序中执行此操作:

CWnd *pMain = AfxGetMainWnd();
CWnd *pButton = pMain->GetDlgItem(ID_CHECKBOX);
pMain->PostMessage(WM_COMMAND, MAKEWPARAM(ID_CHECKBOX, BN_CLICKED), (LPARAM)pButton->m_hWnd);

您可以相应地更改

ID_CHECKBOX
的值。这样您就可以模拟切换按钮。

注意,上面的代码片段使用了

AfxGetMainWnd()
,但您可能需要使用
GetParent()
。取决于您想要哪个窗口。


正如您提到的,另一种方法是使用自定义消息将值发布到父级。可以使用 ClassWizard 添加自定义消息:


另一种方法是在父级中设置一个计时器,检查弹出窗口是否可见。当检测到更改时,它会切换复选框。但有些人可能会说这是浪费资源,因为你只能运行这么多计时器。

© www.soinside.com 2019 - 2024. All rights reserved.