源地址: http://tech.it168.com/a2011/0223/1159/000001159930_1.shtmlhtml
除了遵照三大纪律,保证咱们的升级过程安全平稳进行以外,咱们在具体的将项目从Visual C++ 6.0 升级到Visual C++ 2010的过程当中,还有八个须要注意的事项。只有注意了这八个事项,咱们的升级过程才能最终成功完成。程序员
第一项:升级项目文件安全
将VC6的项目升级到Visual C++ 2010项目的第一件事,不是直接使用Visual C++ 2010打开Visual C++ 6.0 的项目进行升级,而是先利用源代码管理工具,作好代码的备份工做,以防万一。备份工做完成后,咱们才使用Visual C++ 2010打开Visual C++ 6.0 的项目空间(project workspace)文件.dsw,Visual C++ 2010会使用一个升级向导来引导咱们完成升级工做,将Visual C++ 6.0 的项目文件,包括VC6的项目空间文件.dsw和项目文件.dsp,相应的转换为Visual C++ 2010格式的解决方案文件.sln和VC项目文件.vcproj ,这样咱们就利用升级向导快速简单地将一个Visual C++ 6.0 项目升级为了VC2010的项目。框架
除了使用Visual C++ 2010提供的项目升级向导,简单方便地帮助咱们完成升级工做以外,若是咱们的项目比较大,或者是在升级过程当中有错误发生,就可能致使项目升级向导升级失败。在这种状况下,咱们就须要更增强大的升级工具vcupgrade.exe了。它是Visual C++ 2010提供的一个专门用来将项目升级到Visual C++ 2010的命令行工具。咱们能够经过Visual Studio的命令行入口(Visual Studio Command Prompt)执行这个命令,它的使用很是简单:编辑器
vcupgrade.exe <project file (.dsp/.vcproj)>
咱们只要在命令行中以项目文件为参数执行这个程序,它就能够将旧格式的项目文件升级为Visual C++ 2010格式的项目文件,更重要的是,它能够在升级的过程当中,详细的给出遇到的各类错误或者警告信息,这样咱们就能够根据这些信息排查升级过程当中的错误,顺利完成升级。函数
若是咱们的项目升级失败,或者是暂时不想升级,想要退回到原来的版本,除了直接使用咱们最开始备份的项目文件以外,Visual C++ 2010在进行升级的同时也进行了项目文件的备份,咱们只要删除项目文件夹下升级过程当中新产生的项目文件,就能够获得原来的项目了。经过下面的命令行命令,咱们能够轻松地删除升级过程当中产生的新文件,将项目文件恢复到原来的样子:工具
1 del /S *.vcxproj* *.props 2 del UpgradeLog*.XML 3 rd /S /Q _UpgradeReport_Files
不管是使用项目升级向导,仍是仍是使用命令行的vcupgrade.exe,咱们均可以快速地将一个Visual C++ 6.0 的项目转换为Visual C++ 2010的项目。ui
第二项:修改代码符合C++标准this
经过Visual C++ 2010的项目升级向导,或者是vcupgrade.exe完成项目文件格式的升级,只是升级的万里长征走完了第一步。接下来的工做,就是使用VC2010编译整个项目了。众所周知,Visual C++ 6.0 对C++标准的支持不够完善,不少不太符合C++标准的代码均可以在Visual C++ 6.0 中成功编译。若是咱们原来的代码比较符合C++规范,那么编译过程通常没有问题,能够直接编译经过。可是若是咱们原来的代码不太符合C++规范,而仅仅是符合Visual C++ 6.0 的规范,在Visual C++ 6.0 之下能够成功编译经过,那么咱们将代码迁移到VC2010这个更加遵照C++标准的新平台以后,恐怕代码的编译就会遇到一些问题。例如,Visual C++ 6.0 中臭名昭著的for循环局部变量生存期问题。下面的代码,能够在Visual C++ 6.0 的环境下编译经过:spa
1 int arrInt[256]; 2 // 在第一个for循环中定义局部变量i 3 for( int i = 0; i < 256; ++i ) 4 arrInt[i] = i; 5 // 第一个for循环中的局部变量i在第二个for循环中仍然有效 6 for(i = 0; i < 256; ++i ) 7 arrInt[i] += 2010;
可是,当这样的符合Visual C++ 6.0 的规范可是不符合C++标准的代码,迁移到Visual C++ 2010平台以后,就没法编译经过了,咱们必须进行代码的修改,让其符合C++标准才能在Visual C++ 2010中顺利编译经过。
1 int arrInt[256]; 2 for( int i = 0; i < 256; ++i ) 3 arrInt[i] = i; 4 // 第一个for循环中的局部变量i已经无效,第二个for循环须要从新定义局部变量 5 for(int i = 0; i < 256; ++i ) 6 arrInt[i] += 2010;
一样的由于Visual C++ 6.0 对C++标准支持不够而引发的相似问题还有不少,好比Visual C++ 6.0 容许默认函数的返回值为int类型,可是Visual C++ 2010不容许;在Visual C++ 6.0中,string::iterator被定义为char *,可是Visual C++ 2010中不是。若是遇到这样的问题,就须要咱们费点功夫修改咱们的代码使其符合C++标准,这样才能让项目在Visual C++ 2010中编译经过。只是但愿当初写代码的程序员是一个比较遵照C++标准的程序员,这样的问题不会太多,不然这将使得升级成为一个痛苦的过程。愿老天保佑吧!
第三项:该Ribbon时就Ribbon
用Visual C++ 6.0 所开发的软件界面一直以来受到程序员们的诟病,你们都认为Visual C++ 6.0 所设计的软件界面很丑很难看,已通过时了。微软此次下了狠心,在Visual C++ 2010中花了大力气更新了MFC类库,将时下最流行的Ribbon界面引入到了Visual C++ 2010中。对于Ribbon界面,不管是从微软自家的Office和画图程序,仍是其余软件公司的SnagIt和AutoCAD,都开始逐渐使用Ribbon界面,Ribbon界面开始流行并逐渐取代传统的菜单命令式界面,Ribbon将成为下一代主要的软件界面模式已是一个不争的事实。若是咱们原来的软件也是采用的菜单式界面,菜单操做比较多而且比较复杂,那么,将咱们的菜单式界面更换为华丽丽的Ribbon界面,将是一个明智的选择。若是咱们原来的软件是一个多文档视图结构的软件,在Visual C++ 2010中,要将这个软件的传统的菜单式界面更换为Ribbon界面,只须要以下几个简单的步骤就能够完成:
• 在stdafx.h中添加新的头文件
为了让咱们的软件支持Ribbon界面和其余一些MFC新添加的控件,咱们必须使用MFC的 头文件,将这个头文件添加到项目的stdafx.h中,或者是使用Ribbon界面的其余头文件中。
• 将应用程序的基类从CWinApp修改成CWinAppEx
咱们都知道,传统的MFC应用程序类都是派生之CWinApp类,微软在应用程序类中增长了Ribbon界面等特性,将其扩展为了CWinAppEx。因此,要让咱们的软件也一样支持Ribbon界面,就须要将应用程序的基类修改成CWinAppEx。同时,确认应用程序的初始化函数 InitInstance()中调用AfxOleInit()。
• 替换主框架类和子窗口类
一样的道理,为了使用Ribbon界面,咱们须要将代码中全部的应用程序主框架类CMainFrame修改成CMainFrameEx,将全部子窗口类CMDIChildWnd替换为CMDIChildWndEx。
• 为Ribbon界面准备位图资源
Ribbon界面上的按钮等控件须要位图来装饰。咱们能够经过Visual C++ 2010的位图资源编辑器为Ribbon界面建立新的位图资源,也能够导入外部的位图文件做为项目的位图资源。这里须要注意的是,Ribbon界面须要32位的支持透明度的位图资源,由于Visual C++ 2010本身的位图编辑器并不支持透明度,因此咱们最好仍是经过第三方位图编辑器编辑好位图文件后导入为位图资源。
• 添加Ribbon资源
为了更好的支持Ribbon界面的开发,Visual C++ 2010的项目资源中专门添加了Ribbon项,咱们能够经过添加资源的方式将一个新的Ribbon界面资源添加到项目中。同时,Visual C++ 2010还提供了很是直观的Ribbon界面编辑器,方便咱们对Ribbon界面进行修改。经过Ribbon界面控件的属性,咱们能够设置Ribbon按钮的文字,图像资源,ID值等等。若是咱们是将一个菜单式的界面升级为Ribbon界面,咱们无需删除项目中原有的菜单资源,相反地,咱们能够直接使用菜单项的各个ID做为Ribbin界面按钮的ID,这样,这个Ribbon按钮执行的功能将跟原来相同ID值的菜单项的功能相同。
• 加载Ribbon资源,建立Ribbon实例
完成Ribbon资源的编辑后,咱们就能够在代码中加载Ribbon资源,建立Ribbon实例了。在CMainFrame类中,咱们添加一个CMFCRibbonBar 类型的成员变量:
1 // Ribbon Bar 2 CMFCRibbonBar m_wndRibbonBar;
而后在CMainFrame::OnCreate()函数中完成实例的建立和资源的加载:
1 // 建立Ribbon Bar实例 2 if (!m_wndRibbonBar.Create(this)) 3 { 4 return -1; // 建立失败 5 }
1 m_wndRibbonBar.LoadFromResource(IDR_RIBBON1);
• 设置Ribbon界面风格
除了支持Ribbon界面的直接编辑以外,Visual C++ 2010还支持更多Ribbon界面风格的设置。咱们能够经过一个全局的CMFCVisualManager类来进行Ribbon界面风格的设置,丰富软件的界面风格:
1 // 设置视觉效果管理器为Office 2007 2 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007)); 3 // 设置界面风格为Office 2007 Luna Blue 4 CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
到这里,经过这样几个简单的步骤,咱们的软件已经初步具有了Ribbon界面的风格,今后旧貌换新颜。接下来的工做,就须要咱们根据软件的使用方式,借助Visual C++ 2010提供的Ribbon界面资源设计器,对Ribbon界面进行设计,好比Ribbon界面的快速访问(Quick Access)按钮,各个分类(category),各个按钮以及各个控件等等,真正利用Ribbon界面来改善软件的用户体验。