源地址: 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界面來改善軟件的用戶體驗。