初始化对话框后,子对话框的 hWnd 将重置为 NULL。
Subdialog's hWnd resets to NULL after the dialog is initialized
我遇到了以下问题。我有一个有一些控件的主对话框。它还显示了几个子对话框(作为子控件),这些子对话框被设置为具有其ID
的指针成员。我在OnInitDialog
期间通过CreateControl
与他们的ID
创建这些对话。昨天它工作得很好。今天,我决定在子对话框中添加一些控件,发现了一个问题。
这就是我在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);
我看到两个子对话框的OnInitDialog
和DoDataExchange
工作良好,子对话框的m_hWnd
设置,GetDlgItem
方法返回有效值。但是当执行回到主对话框的OnInitDialog
时,我看到pNewObjDlg
和pSharedObjDlg
的m_hWnd
值是NULL
。我不知道这是怎么发生的。我仔细检查了ID
,它们没有重叠。结果,我得到一个ASSERT
,除了与其控件的主对话框外,没有显示任何内容。有什么想法吗?
问题解决了。当数据加载到DoDataExchange
中的控件时,我偶尔调用Fail
。它是一个没有项目的组合框,因为DoDataExchange
是在组合框初始化之前从基类调用的。这不是逻辑所期望的,因此调用了Fail
。它会导致这些子窗口被破坏。
相关文章:
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在 Win32 应用中,如果未选择文件夹并且用户单击"确定",则文件夹选择对话框将关闭
- 在主窗口之前显示登录对话框并隐藏主窗口按钮
- 找不到没有具有类名 #32770 的窗口名称的父窗口的子窗口(对话框)
- C++无法在对话框 CFormView 中显示 ActiveX 控件,则控件变量为 NULL
- 初始化对话框后,子对话框的 hWnd 将重置为 NULL。