以CDialog派生出来的CRenameDlg类,当执行DoModal()后,对话框显示了出来,但,整个界面马上就无法操作了。大约过20来秒之后,才能在在对话框里输入值,才能操作。
CString GnewFolder="";/////////////////////////////////////////////////////////////////////////////
// CRenameDlg dialogCRenameDlg::CRenameDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRenameDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRenameDlg)
m_strNewName = _T("");
//}}AFX_DATA_INIT
}
CRenameDlg::CRenameDlg(CString str,CWnd* pParent/* = NULL*/)
:m_strOldName(str),CDialog(CRenameDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRenameDlg)
m_strNewName = _T("");
//}}AFX_DATA_INIT
}
void CRenameDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRenameDlg)
DDX_Text(pDX, IDC_NEWNAME, m_strNewName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRenameDlg, CDialog)
//{{AFX_MSG_MAP(CRenameDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CRenameDlg message handlersvoid CRenameDlg::OnOK() 
{
// TODO: Add extra validation here
UpdateData(true);
if (m_strNewName.IsEmpty())
{
return;
} if (m_strOldName.Find(m_strNewName)!=-1)
{
AfxMessageBox("文件夹已存在");
return;
}
GnewFolder=m_strNewName;
CDialog::OnOK();
}//调用方式:
CRenameDlg dlg(str);
if (dlg.DoModal()!=IDOK)
{
return ;
}

解决方案 »

  1.   

    从代码上看不出问题,你的OninitDialog函数里都做了什么?
      

  2.   

    最好把RenameDlg.cpp的代码都贴出来
      

  3.   

    既然已经显示出来了,可能就不是OninitDialog的问题,
    有可能是哪个地方占用了UI线程导致消息无法及时响应,当相应的后台工作完成(20s)后又恢复正常的交互了
      

  4.   

    我觉得问题应该出现在void CRenameDlg::OnOK() 这里面,
    是不是判断文件是否存在用的函数错了,导致程序在里面做了很多操作。
      

  5.   

    你判断文件是否存在的时候,m_strNewName这个路径好像要转成有//这种路径,或者换一个函数来判定。
    给个参考的代码:
    bool CFileExitDlg :: FindFile(CString strPath,CString strFileName)
    {
    CString strtemp;
    bool flag=false;
    if(strPath.Right(1)!="\\")
    strtemp.Format("%s\\*.*",strPath);
    else
    strtemp.Format("%s*.*",strPath);
    CFileFind findfile;
    BOOL bfind=findfile.FindFile(strtemp);
    while(bfind)
    {
    bfind=findfile.FindNextFile();
    if(strFileName==findfile.GetFileName())
    {
              flag=true;
    }
    if(findfile.IsDirectory()&&!findfile.IsDots())
    {
    FindFile(findfile.GetFilePath(),strFileName);
    }
    }
    return flag;
    }
      

  6.   

    可以自己设断点,单步调试一下,看界面hung在那一部分
      

  7.   

    我是在CTreeView中点击右键菜单,弹出来的对话框。我换成别的对话框也出现相同的问题。别的对话框在命令中调用弹出来的,就没有事呀。