MFC单文档自定义扩展名及添加图标报Assertion错误

忽然无聊的想给自己写的程序保存的文件使用自己的名字简写作为后缀,于是有了下文。


IDR_MAINFRAME格式介绍

IDR_MAINFRAME字符串资源中包含7个子串,分别以/n结束,即如下格式:

<windowTitle>/n<docName>/n<fileNewName>/n<filterName>/n<filterExt>/n<regFileTypeId>/n<regFileTypeName>/n

  1. CDocTemplate::windowTitle,主窗口标题栏上的字符串,MDI程序不需要指定,将以IDR_MAINFRAME字符串为默认值。
  2. CDocTemplate::docName,缺省文档的名称。如果没有指定,缺省文档的名称是无标题。
  3. CDocTemplate::filterName,文档类型的描述和一个适用于此类型的通配符过滤器。这个字符串将出现在“File/Open”对话框中的文件类型列表框中。要和CDocTemplate::filterExt一起使用。
  4. CDocTemplate::filterExt,文档的扩展名。如果没有指定,就不能够在“File/Open”对话框中处理这种文档。要和CDocTemplate::filterName一起使用。
  5. CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在HEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用。如果没有指定,这种文件类型就无法注册。
  6. CDocTemplate::regFileTypeName,这也是存储在注册表中的文件类型名称。它会显示于程序中用以访问注册表的对话框内。

单文档自定义保存文件名

  1. 在新建项目时,其中有一步会有advanced选项,可在里面设置扩展名。
  2. 如果项目已经建立,而我们又是使用系统自带的文件保存,则可以在资源视图->String Table->String Table,找到ID为IDR_MAINFRAME项进行修改。在第三个 和第四个 后输入你需要的过滤符。
    如:CADProject CADProject txt .txt CADProject.Document CADProject.Document(其中CADProject是项目名称,扩展名txt)
  3. 添加多种扩展名.如添加txt和ini格式:CADProject CADProject File(*.txt;*.ini) .txt;.ini CADProject.Document CADProject.Document。【注】filterExt使用分号";"隔开,分号后不带空格

参考1
参考2
参考3


修改ToolBar图标导致DEBUG ASSERTION错误

由于toolbar上的图标是通过复制粘贴的,于是在MainFrame中:

        if (CMFCToolBar::GetUserImages() == NULL)
	{
		// load user-defined toolbar images
		if (m_UserImages.Load(_T(".\UserImages.bmp")))
		{
			CMFCToolBar::SetUserImages(&m_UserImages);
		}
	}

出现debug assertion failed错误,解决办法,修改为:

        if (CMFCToolBar::GetUserImages() == NULL)
	{
		// load user-defined toolbar images
		if (m_UserImages.Load(_T(".\UserImages.bmp")))
		{
			m_UserImages.SetImageSize(CSize(16, 16), FALSE);
			CMFCToolBar::SetUserImages(&m_UserImages);
		}
	}

具体原因:
参考4
参考5

原文地址:https://www.cnblogs.com/skywatcher/p/4137777.html