怎么自定义MFC程序的保存文件名称?

本文介绍如何在MFC单文档程序中自定义文件对话框的文件类型,包括通过资源编辑和代码调整两种方式,并提供了详细的步骤说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(转自: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 cancelled

 AfxGetApp()->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改动。

回答: 这个错误是由于浏览器的CORS策略引起的。CORS是一种安全机制,用于限制请求。当浏览器发现请求的源与目标不在同一个时,会发送一个预检请求,检查目标服务器是否允许请求。如果目标服务器没有正确配置CORS头部,浏览器就会拒绝该请求,从而导致这个错误。\[1\]\[2\] 对于你提到的具体错误,'file:///D:/vue/vue-first/data.json'是一个本地文件路径,而'null'是请求的源。由于这是一个本地文件请求,而不是通过HTTP协议请求,所以CORS策略不适用于这种情况。因此,你可以通过将数据文件放在与你的应用程序相同的中,或者使用服务器来提供数据,以避免这个错误。 #### 引用[.reference_title] - *1* [Access to XMLHttpRequest athttp://xxx‘ from originhttp://xxx‘ has been blocked by CORS ...](https://blog.csdn.net/qq_41470439/article/details/109361842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前后端分离问题Access to XMLHttpRequest athttp://localhos...has been blocked by CORS policy: ...](https://blog.csdn.net/qq_42416602/article/details/121731774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Access to XMLHttpRequest athttp://xx‘ from originhttp://xx‘ has been blocked by CORS policy](https://blog.csdn.net/weixin_51603038/article/details/129319187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值