(转自:http://wenwen.soso.com/z/q274419303.htm)
用MFC的默认创建的单文档程序,菜单栏里的“文件->保存(或打开)”里的类型都是“所有文件(*.*)”,怎么样才能自定义文件后缀名呢?
在你创建单文档程序的第四步,哪里不是有个advanced选项吗。单击它,然后再如图所示输入文件的后缀名,如txt,然后点Finish,效果如图
,还有一种方法就是打开你的资源视图,点击字符串表,哪里不是有个ID为IDR_MAINFRAME,默认是Test\n\nTest\n\n\nTest.Document\nTest Document(注:Test是你输入的工程名),你可以在第三个\n后面输入,显示在保存类型的内容,在第四个\n后面输入过滤符,如.txt。
至于通过代码修改的,我想不起来了,应该在CDocument类中吧,去查查MSDN吧,。
-
追问:
- 啊,我已经把整个程序都写好了,重新写太麻烦了,有其他改动办法么
-
回答:
-
打开你的资源视图,点击字符串表,哪里不是有个ID为IDR_MAINFRAME,默认是Test\n\nTest\n\n\nTest.Document\nTest Document(注:Test是你输入的工程名),dd\nguigui\ntxt\n.txt\n.txt\nMDI.Document\nMDI 跟着这个格式改,就可以了,没办法用代码实现。因为消息响应函数OnFileOpen中定义的文件对话框是局部对象。它是用IDR_MAINFRAME标示的字符串资源去填充CFileDialog的构造函数。根本无法获取到指针,看了半天的源代码,,晕啊、。
-
补充:
-
忘记给你把源代码发出来了,OnFileOpen是消息响应函数,响应你打开文件对话框的,保存对话框也一样的道理。下面是MFC的源代码。仔细看我加黑的那些代码调用,
afx_msg void OnFileOpen();//这里是响应函数的申明,
void CWinApp::OnFileOpen()
{
ASSERT(m_pDocManager != NULL);
m_pDocManager->OnFileOpen();
}你只看调用关系。这里调用文档类的OnFileOpen();
void CDocManager::OnFileOpen()//文档类的OnFileOpen
{
// prompt the user (with all document templates)
CString newName;
if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,
OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))
return; // open cancelledAfxGetApp()->OpenDocumentFile(newName);
// if returns NULL, the user has already been alerted
}//文档类里面只看它调用的DoPromptFileName方法,代码如下。
BOOL CDocManager::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
CFileDialog dlgFile(bOpenFileDialog);//仔细看这里CString title;
VERIFY(title.LoadString(nIDSTitle));//这里加载字符串资源哦。。仔细看。dlgFile.m_ofn.Flags |= lFlags;
CString strFilter;
CString strDefault;
if (pTemplate != NULL)
{
ASSERT_VALID(pTemplate);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, &strDefault);
}
else
{
// do for all doc template
POSITION pos = m_templateList.GetHeadPosition();
BOOL bFirst = TRUE;
while (pos != NULL)
{
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate,
bFirst ? &strDefault : NULL);
bFirst = FALSE;
}
}// append the "*.*" all files filter
CString allFilter;
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
strFilter += allFilter;
strFilter += (TCHAR)'\0'; // next string please
strFilter += _T("*.*");
strFilter += (TCHAR)'\0'; // last string
dlgFile.m_ofn.nMaxCustFilter++;dlgFile.m_ofn.lpstrFilter = strFilter;
dlgFile.m_ofn.lpstrTitle = title;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);int nResult = dlgFile.DoModal();
fileName.ReleaseBuffer();
return nResult == IDOK;
}在上面看见了CFileDialog吗,程序员一般会,会心的一笑,因此证明,要改文件对话,只能通过资源,IDR_MAINFRAME改动。