调整下FileDialog的button位置,编译通过说明东西都在。可能换了编译环境位置不同了。

解决方案 »

  1.   

    调正过了~没用 重载的Dialog没出来,出来的就是个FileDialog
      

  2.   

    http://www.codeproject.com/KB/dialog/imagepreviewdialog.aspx
    是想定制CFileDialog对话框吗?可以参考一下这个?
      

  3.   

    用GetDlgItem(IDC_BTN_DELETE)测试一下有没有这个Button
    如果有,用GetWindowsRect看一下button的位置
      

  4.   

    自己重载CFileDialog和CDialog一样,不能再次绑定它与一个已有的对话框了,所以在你的代码中
    enum { IDD = IDD_DLG_FILESPECIAL }; 这一句是无效的代码,它并不是你所相像的如果直接DoModal窗口就会显示,而必须像创建普通窗口一样,先创建再显示
    1.CSpcialDialog dlg;
    if(!IsWindow(dlg.m_hWnd)){   //如果dlg没有创建成功成为一个窗口
        dlg.Create(窗口ID,this);
    }
    dlg.ShowWindow();
      

  5.   

    enum { IDD = IDD_DLG_FILESPECIAL }; 这句是没什么用,在不在都不影响。
    m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DLG_FILESPECIAL);
    这句话是把窗体当成了FileDialog的模板的。
    关键是2005下很正常~
      

  6.   

    2010下跟下代码终于看到了原因,2010下的CFileDialog下有个m_bVistaStyle变量,版本号大于6的时候会把m_bVistaStyle设置为TRUE。DoModal的时候就会Show而不去调用OnInitDialog,所以关联的窗体根本没有创建出来试着把m_bVistaStyle手动改成了FALSE,界面时完整出来了,但是推出就会报错,不是解决办法,看来2010已经不这么嵌套FileDialog窗体了
      

  7.   

    我告诉你一个办法。你不要自己将m_bVistaStyle设置为假,你从新写一个DoModal方法,将系统中的考过来,去掉有关m_bVistaStyle为真的哪一部分就OK了。
    //if (m_bVistaStyle == TRUE)
    //{
    // ApplyOFNToShellDialog();
    // HRESULT hr = (static_cast<IFileDialog*>(m_pIFileDialog))->Show(m_ofn.hwndOwner);
    // nResult = (hr == S_OK) ? IDOK : IDCANCEL;
    //}
    /*else*/ if (m_bOpenFileDialog)
    nResult = ::AfxCtxGetOpenFileName(&m_ofn);
    else
    nResult = ::AfxCtxGetSaveFileName(&m_ofn);
      

  8.   

    直接在重载时,初始化中,将bVistaStyle 赋值为FALSE,就行了。
    注意在vs2010里面重载时比05之前版本的多两个参数,最后一个参数就是m_bVistaStyle。
    如:
    CFilePreDlgEx(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL,
            DWORD dwSize = 0,
            BOOL bVistaStyle = FALSE);
    最后一个参数设为FALSE.
      

  9.   

    在win7 vs2008sp1   BOOL bVistaStyle = FALSE 出来的还是系统的CFiledlg,不是自己定义的。不知道楼主是怎么解决的
      

  10.   

    其实除了将m_bVistaStyle设为FALSE外,还需要将其中另一个成员变量m_dwRef 设为1才能保证显示正常和退出不报错
    在自己定义的class(继承自CFileDialog)的构造函数中加入下面两句即可
    m_bVistaStyle=FALSE;
    m_dwRef = 1;