MFC Feature Pack/VC2008 SP1提供了新的控件,這包括以前需要花費購買的控件,這些控件原來由BCG Soft 開發,在VS2008發布后,被收入后以FeaturePack或SP1的方式發布(VS2008安裝包原本沒有此功能包,必須額外安裝)。對很多用戶來說,屬性列表控件、真彩色工具條、工具條、停靠欄、更換皮膚、標簽式多文檔、智能停靠、個性化布局,還有Office、VS中眾多的的控件都包含在這個功能包中,這個SP1,是MFC控件庫在1998年發布后的首次重大更新,對于MFC程序員,值得體驗。
因為這些新的控件給開發帶來很多便利,我們使用了VS2008,但是這兩個月一直被一個問題所困擾,那就是CMFCToolBar。向導創建的項目,運行得非常好,界面也很漂亮,還支持換膚,但是當應用程序添加第二個工具條時,問題就出現了。
我們添加第2個工具條的方法和示例代碼中的一樣,但出現了各種奇怪問題,癥狀表現為:
1.最大化時,兩個工具條是連接在一起的,但是左側工具條會自動移動一段距離;
2.重啟應用程序,界面依然是混亂的;
3.重新啟動程序,再退出后,偶爾有內存泄露,未正常釋放的對象是工具套按鈕對象,具體原因不詳,跟蹤后發現泄露發生在LoadState時。
如果退出程序后,把注冊表中此工程相關項刪除再啟動程序,則界面正常,但是再重啟后,問題依舊。
當我找到解決問題的辦法時,才后悔沒多看看SP1的Sample。以下是正確的創建第2個CMFCToolBar的方法,這里貼上缺省的m_wndToolBar的創建代碼,以便進行比較。謝天謝地,這個問題還是解決了。由于時間有限,問題的原因到底出現在哪里,還不得而知,如果有朋友細細研究過,還望不吝賜教。
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("未能創建工具欄/n"); return -1; // 未能創建 } if (!m_wndToolBarNew.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,IDR_TOOLBAR1) || !m_wndToolBarNew.LoadToolBar( IDR_TOOLBAR1)) { TRACE0("未能創建工具欄/n"); return -1; // 未能創建 }
SP1 Sample可以在以下位置找到:
X:/Program Files/Microsoft Visual Studio 9.0/Samples/AllVCLanguageSamples.zip
解壓后的路徑為:
AllVCLanguageSamples/C++/MFC/Visual C++ 2008 Feature Pack
也可以在這個位置下載到:
http://www.microsoft.com/downloads/details.aspx?familyid=9761BB57-F066-4B70-9318-3965C5E68AAD&displaylang=en
Keyword: Microsoft Visual C++ 2008 SP1 Sample Library
SP1下載地址:
http://msdn.microsoft.com/en-us/library/bb982354.aspx
|
新聞熱點
疑難解答