CFileDialog::OnInitDialog() 不调用

Posted

技术标签:

【中文标题】CFileDialog::OnInitDialog() 不调用【英文标题】:CFileDialog::OnInitDialog() does not call 【发布时间】:2013-03-26 08:51:07 【问题描述】:

我正在使用从CFileDialog 扩展的自定义文件对话框。 问题是,OninitDialog() 不会在 DoModal() 之前被调用。

我在OninitDialog() 中自定义了CFileDialog

我正在使用带有 Win7 操作系统的 VS 2012。

我找不到,出了什么问题。

【问题讨论】:

【参考方案1】:

Microsoft documentation 表示 Windows Vista 不支持OnInitDialog。 Windows 7 也是如此(可能也适用于 Windows 8)。

【讨论】:

是否有任何其他选项可以自定义 CFileDialog ?或者是否有任何其他对话框可以让我得到解决方案..??请提出建议。 也许你可以在这里forum.codejock.com/…和msdn.microsoft.com/en-us/library/vstudio/bb775912.aspx获得一些信息。顺便说一句,为什么在 CFileDialog 中需要 OnInitDialog ? 实际上,我想修改那个对话框,我的意思是要根据我的应用要求添加复选框、按钮和组合框。 您可能需要努力做到这一点,请参阅我之前评论中的链接。祝你好运。【参考方案2】:

我今天遇到了同样的问题;我想我找到了一个有效的解决方案,在你的类的构造函数中设置 m_bVistaStyle = FALSE; 完成此操作后,我得到了 OnInitDialog,并且能够很好地自定义此对话框。

CMyOpenDlg::CMyOpenDlg(LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
      DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
      CFileDialog(TRUE, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)

   m_bVistaStyle = FALSE;

【讨论】:

赞成,但 m_bVistaStyle 不应在构造函数中设置(至少应在析构函数中恢复)。相反,在构造 CFileDialog 对象时应该将 FALSE 传递给最后一个参数bVistaStyle

以上是关于CFileDialog::OnInitDialog() 不调用的主要内容,如果未能解决你的问题,请参考以下文章