这里的顶目名称是D-,。要让打开/保存对话框支持多个扩展名,TYPE字段:STRINGTABLEBEGINIDR_MAINFRAME"D-"TYPE"\\nD-\nD-Files(*.dtn;*.csv\;.csv\.Document\nD-.Document"END这样做的不足是,文件虽然可以有多个扩展名,但仍然只分为两类:"D-Files"和"AllFiles"。要想更细致地分类,需要重写相关的虚函数,具体做法不唯一,我觉得比较好的一种是重写CDocManager::DoPromptFileName。下面的文字有些凌乱,因为它的内容是按照我的探索过程组织的。首先考虑打开对话框。第一步是要弄清,打开对话框是什么时候(在哪)弹出来的?默认情况下,App调用CWinApp::OnFileOpen方法处理FileOpen事件:MAND(ID_FILE_OPEN,&CWinApp::OnFileOpenCWinApp::OnFileOpen又调用CDocManager::OnFileOpen处理FileOpen事件:voidCWinApp::OnFileOpen({ENSURE(m_pDocManager!=NULL;m_pDocManager->OnFileOpen(;}CDocManager::OnFileOpen显示对话框与用户交互,然后调用CWinApp::OpenDocumentFile方法:voidCDocManager::OnFileOpen({//prompttheuser(withalldocumenttemplatesCStringnewName;if(!DoPromptFileName(newName,AFX_IDS_OPENFILE,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,TRUE,NULLreturn;//opencancelledAfxGetApp(->OpenDocumentFile(newName;//ifreturnsNULL,theuserhasalreadybeenalerted}显然,一种可能的解决办法是绕过CWinApp和CDocManager,App::OnFileOpen方法中显示自定义对话框,然后调用CWinApp::OpenDocumentFile方法。MAND(ID_FILE_OPEN,&App::App::OnFileOpen({LPCTSTRszFilter=L"文件(*.dtn|*.dtn|CSV文件(*.csv|*.csv|所有文件(*.*|*.*||";CFileDialogoFileDlg(TRUE,L".dtn",NULL,4|2,szFilter;if((==IDOKOpenDocumentFile((;//App不需要重写CWinApp::OpenDocumentFile方法}现在考虑保存对话框。第一步仍然是弄清,保存对话框是什么时候(在哪)弹出来的?分发消息时,调用了CDocument::DoFileSave虚方法:BOOLCDocument::DoFileSave({DWORDdwAttrib=GetFileAttributes(m_strPa
自定义MFC打开保存对话框的扩展名 来自淘豆网m.daumloan.com转载请标明出处.