if(IDOK == dlg.Domodal())

解决方案 »

  1.   

    这个 ”确认另存为“小对话框,是属于 CFileDialog 内部封装的对话框了如何知道这个 用户在 小对话框 做了何种选择?
      

  2.   

    比较复杂, 大概是:要用到 钩子:
    CFileDialog fd(FALSE);
    ...
    fd.m_ofn.Flags |= OFN_EXPLORER;
    fd.m_ofn.lpfnHook = YourHookProc;//////////////////
    UINT CALLBACK YourHookProc(HWND hDlg,UINT uMsg,WPARAM wPar,LPARAM lPar)
    {
    switch (uMsg)
    {
    case WM_NOTIFY:
    {
    LPOFNOTIFY pofn=(LPOFNOTIFY)lPar;
    switch(pofn->hdr.Code)
    {
    case CDN_FILEOK:// 这是 “文件已存在对话框”出现后 ,用户 点了 ‘OK’,如果 没有 这个消息 就是 cancel
    // do what you want
    break;
    }
    }}
    }
      

  3.   

    钩子是一个方法。有没有什么办法,比如设置某个成员标记什么的,能让 CFileDialog 不弹出那个小对话框,全部由我在代码中来判断:if(IDOK==dlg.DoModal())
    {
       // Do my want
       if(/*Do my want falied*/)
       {
         switch(GetLastError())
         {
            case ERROR_FILE_EXISTING:
                // 文件已经存在,要覆盖吗?
                break;
            default:
                break;
         }
        }
    }
      

  4.   

    “fd.m_ofn.lpfnHook = YourHookProc”
    这个 hook 就 这些 CDN_FILEOK 
    要不 你 自己 做个 save 对话框
      

  5.   

    试试:
    ”CDN_SELCHANGE“ 里 做些什么 。
      

  6.   

    不要OFN_OVERWRITEPROMPT标志 是否覆盖的对话框就不会弹出
      

  7.   

    其实没必要知道了,CFileDialog自己就能判断,如果你选择否,直到你输入不同的文件名后,才能关闭文件对话框