您现在的位置是:主页 > news > 网站商城建设实训心得/柳州网站建设哪里有

网站商城建设实训心得/柳州网站建设哪里有

admin2025/5/5 23:32:58news

简介网站商城建设实训心得,柳州网站建设哪里有,百度58网络推广怎么做,注册网站会员需要填写信息2008MFC单文档文件太大的解决方法 发表于 2011 年 05 月 01 日, 上午 12:09, 由 gvu 发表在 日积月累.有时候要实现一个简单的功能,为了快速开发,使用MFC框架,去掉了很多不必要的支持,创建的配置如下图: 但是最终生成的…

网站商城建设实训心得,柳州网站建设哪里有,百度58网络推广怎么做,注册网站会员需要填写信息2008MFC单文档文件太大的解决方法 发表于 2011 年 05 月 01 日, 上午 12:09, 由 gvu 发表在 日积月累.有时候要实现一个简单的功能,为了快速开发,使用MFC框架,去掉了很多不必要的支持,创建的配置如下图: 但是最终生成的…

2008MFC单文档文件太大的解决方法

有时候要实现一个简单的功能,为了快速开发,使用MFC框架,去掉了很多不必要的支持,创建的配置如下图:

但是最终生成的时候,发现体积实在是太大了,居然有2.71M的大小。

网上找了一下只找到对基于对话框的优化,唉,还是自己摸索吧。我最终把文件的体积缩减到300多K。

下面是减肥过程。

先打开预编译头StdAfx.h把afxcontrolbars.h的头文件包含去掉。把App类的基类由CWinAppEx修改为CWinApp,CMainFrame的基类由CFrameWndEx修改为CFrameWnd,这个修改很简单,直接整个解决方案把”CWinAppEx”替换成”CWinApp”,Frame也一样。

找到CMainFrame类,在控件里面把CMFCMenuBar之类的控件都删除,这些控件需要afxcontrolbars.h的支持,我们可以使用简单的类去代替就可以了。在CMainFrame中找到:

 CMFCMenuBar       m_wndMenuBar;
 CMFCToolBar       m_wndToolBar;
 CMFCStatusBar     m_wndStatusBar;
 CMFCToolBarImages m_UserImages;

都删掉,因为删掉了,所以也要把响应的用到他们的地方删掉到CMainFrame的OnCreate响应函数,我们修改后可以编译一下,如果不通过会提示出错信息,做了以上步骤编译出错,在CthinApp::InitInstance()的InitContextMenuManager、InitKeyboardManager、InitTooltipManager函数出错,原因是这是CWinAppEx的成员函数,而不是CWinApp,删掉他,再编译,找到出错的都修改过来,具体的出错比较多,就不一一列出来了,比较值得说的是有些CMainFrameEx才有的函数需要删掉,比如OnToolbarCreateNew,因为他们都不是CMainFrame的成员函数。在CMainFrame::OnCreate还有一些错误CDockingManager::SetDockingMode和EnableAutoHidePanes这个需要afxcontrolbars.h的支持,他的作用是启用窗口停靠行为,我不需要这些可以删掉这些代码,CMainFrame::OnCreate这个函数的除了调用基类的OnCreate和返回值保留,其他的都可以删除。CthinApp::PreLoadState里面的代码都删掉吧。至此,错误都已经修改完,编译成功,运行也没出错,但是文件还是太大了,有1.36M。原来是资源中包含了很多不需要使用的资源。我们进入资源编辑器,把不需要的资源都删除吧。好了,在工程中把大部分不需要使用的资源删除再编译,发现文件大小并没有多大改观,用PE工具打开发现资源加上了很多资源,原来默认MFC的资源中还包括了afxres.rc、afxprint.rc以及afxribbon.rc资源文件,现在关闭VS工程。进入到工程目录,找到工程名.rc文件用记事本打开,搜索”afxres.rc”,删掉:

“#include “”l.CHS//afxprint.rc”"        // 打印/打印预览资源/r/n”
    “#if !defined(_AFXDLL)/r/n”
    “#include “”l.CHS//afxribbon.rc”"               // MFC 功能区和控件条资源/r/n”
    “#endif/r/n”

/切记afxres.rc不能删除,否则运行出错,MFC还需要调用里面的一些资源

这两个资源文件有两处包含,找出来删掉保存。打开工程再编译,现在体积只有380K,现在已经很小了,如果需要更小可以继续进行下面的步骤。

进入VS的安装目录,搜索afxres.rc文件,这个文件的位置可以通过工程.rc去查看,比如”#include “”l.CHS//afxres.rc”",那么你要拷贝l.CHS目录下面的afxres.rc。我们拷贝到我们工程的res目录,因为里面还包括了一些不需要使用的资源,虽然他通过一些#define开关去掉某些资源,但是还是有一些比较大的资源没办法去掉,所以我们要手动修改这个资源文件,拷贝过来修改文件名为afxres.rc2吧,后用记事本打开。

删掉里面不用的资源,比如那一大堆鼠标形状资源,对话框资源。

我们用记事本打开原来的工程资源文件把afxres.rc修改为我们修改后的res//afxres.rc2。

现在编译最终有370K。

我另外的一个工程加了很多代码和资源,用这个方法生成后才345K,但是Debug版却不能使用了。。。

转自http://www.68ui.com/?p=93