【问题标题】:Subdialog's hWnd resets to NULL after the dialog is initialized初始化对话框后,子对话框的 hWnd 重置为 NULL
【发布时间】:2013-06-18 16:17:57
【问题描述】:

我一直遇到以下问题。我有一个包含一些控件的主对话框。它还显示了几个子对话框(作为子控件),这些子对话框设置为带有IDs 的指针成员。我在OnInitDialog 期间通过CreateControl 使用IDs 创建这些对话框。昨天它工作得很好。今天,我决定在子对话框中添加一些控件,结果发现了一个问题。

这就是我在主对话框 durig OnInitDialog 中创建子对话框的方式:

if (m_pNewObjDlg != NULL) m_pNewObjDlg->Create(m_nNewObjDlgID, this);
if (m_pSharedObjDlg != NULL) m_pSharedObjDlg->Create(m_nSharedObjDlgID, this);

这就是我在我的一个例程之外设置子对话框的方式:

dlgSelectSharedObject.SetNewPageObject(&dlgSelectNewTableDialog, CSelectNewTableDialog::IDD);
dlgSelectSharedObject.SetSharedPageObject(&dlgSelectSharedTable, CSelectSharedTableDialog::IDD);

我看到两个子对话框的OnInitDialogDoDataExchange 运行良好,子对话框的m_hWnds 已设置,GetDlgItem 方法返回有效值。但是当执行回到主对话框的OnInitDialog 时,我看到m_hWndpNewObjDlgpSharedObjDlg 的值是NULL。我不知道这怎么会发生。我仔细检查了IDs,它们没有重叠。结果,我得到了一个ASSERT,除了带有控件的主对话框之外什么都没有显示。有什么想法吗?

【问题讨论】:

  • 您的子对话框中有哪些控件?有 OCX 控件吗?
  • @cha 我没有使用像 OCX 和扩展这样的异常控件,一切都只是按钮、标签和列表框。
  • 我猜是IDs。
  • 不,IDs 似乎没问题。 m_hWnd重置为NULL是什么原因?

标签: c++ mfc dialog


【解决方案1】:

问题解决了。当数据加载到DoDataExchange 中的控件时,我偶尔会调用Fail。这是一个没有项目的组合框,因为在组合框初始化之前从基类调用了DoDataExchange。逻辑没有预料到它,因此调用了Fail。它会导致这些子窗口的破坏。

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多