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

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

我在OninitDialog() 中自定义了CFileDialog

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

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

【问题讨论】:

    标签: windows visual-c++ mfc cfiledialog


    【解决方案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
    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2011-12-25
    • 2013-07-28
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多