假定:
class A: public CDialog
{
...
}Class B:public CFileDialog,public A
{
....
}
如何解决编译时的delete(etc) is ambiguous的问题

解决方案 »

  1.   

    http://msdn.microsoft.com/library/en-us/vclib/html/_mfcnotes_tn016.asp
      

  2.   

    下面这种情况中的“基”称为“虚基类”。
      基
     ↙↘
    子1 子2
     ↘↗
      孙
    在你的B类中使用某个成员函数时可以这样:
    A::MemberFunction1();
    CFileDialog::MemberFunction2();
      

  3.   

    不能这样用,VC不支持多继承
    应该从CFileDialog派生一个类,然后在对该类话框模板里画一个区域分割控件并且该控件ID是stc32=0x045f(这个值用Spy++得到)
    然后别的功能控件画到该分割区域的外面
    之后改写构造函数   格式:
      构造函数名(BOOL bOpenFileDialog,
                 LPCTSTR lpszDefExt = NULL,
                 LPCTSTR lpszFileName = NULL,
                 DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                 LPCTSTR lpszFilter = NULL,
                 CWnd* pParentWnd = NULL);
    然后改写该函数:
       构造函数名(BOOL bOpenFileDialog,
                 LPCTSTR lpszDefExt = NULL,
                 LPCTSTR lpszFileName = NULL,
                 DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
                 LPCTSTR lpszFilter = NULL,
                 CWnd* pParentWnd = NULL)
                 :CFileDialog(bOpenFileDialog, lpszDefExt,lpszFileName, dwFlags, 
                                lpszFilter, pParentWnd)
      {
          m_ofn.Flags |= OFN_ENABLETEMPLATE;
          m_ofn.lpTemplateName = MAKEINTRESOURCE(对话框模板ID);
          m_ofn.lpstrTitle = "对话标题";
          //其余一些要初始化的东西
      }
    这样就可以加强文件对话框的功能。