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() 不调用的主要内容,如果未能解决你的问题,请参考以下文章