點點滴滴
posts - 311, comments - 0, trackbacks - 0, articles - 0
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
(搬運工)用VS2008 Feature Pack 修改您現有的Visual C++的程序界面
Posted on 2011-06-13 19:23
點點滴滴
閱讀(293)
評論(0)
編輯
收藏
引用
所屬分類:
02 編程語言
上次給大家介紹了Visual C++ 2008 的Feature Pack的界面庫新特性。今天給大家介紹一下,怎樣用Feature Pack把您現有的Visual C++ 程序界面修改得漂亮些。
所需的修改環境:
Visual C++ 2008 (Team Suite版Express版都可以,但必須是英文版,否則Feature Pack不支持)
正確的安裝了Visual C++ 2008 Feature Pack beta
您要修改的Visual C++ 的程序源代碼工程
具備了以上三點就可以開始進行修改操作了。但是有一點提請注意,那就是您程序中是否用到了MS C++ 9.0 編譯器不再支持的語法特性?如果有,那很不幸,我個人不推薦您升級您的程序界面,畢竟程序運行的穩定性才是最重要的。為了漂亮的界面修改已經測試過并穩定運行的代碼,可不是一個明智的選擇。
下面我就用一個Visual C++的入門Demo
Scribble
來修改。這個Scribble您可以在MSDN網站上下載到,但請您注意,我給出的這個下載工程是VS2005 for x64的。下載后,您需要進行以下改動:
1) 將Scribble工程屬性中,C/C++編譯器的Treat Warnings as error 關閉,否則您的工程將會因為一個Warning沒有解決,導致整個程序編譯失敗。如圖:
2) 編譯時,將Target 改為Win32;
羅嗦了這么多,開始修改吧!
第一步: 請確定CScribbleApp::InitialInstance() 方法中已經調用了AfxOleInit();
第二步: 在stdafx.h文件中加入 #include"afxcontrolbars.h" ,這頭文件包含了Feature Pack新增的界面類聲明;
第三步:修改CScribbleApp類繼承的父類,由CWinApp改為CWinAppEx;這個CWinAppEx類比CWinApp添加了很多的功能,說個簡單的,CWinAppEx提供了一個SetRegistryBase方法,這個方法可以用來設定當前App所使用的注冊表的根。
第四步:修改主框架類,將CMainFrame的父類由CMDIFrameWnd改為CMDIFrameWndEx;這個修改設計到類聲明、IMPLEMENT_DYNAMIC宏、MESSAGE_MAP宏、OnCreate函數等調用到靜態方法的地方、以及其它等等。最好是直接用Replace all文本替換掉;
第五步:將CMDIChildWnd類替換為CMDIChildWndEx,主框架換了,子窗體也要換;
第六步:替換CTooBar為CMFCTooBar,替換CStatusBar為CMFCStatusBar;就是修改一下m_wndStatusBar和m_wndToolBar兩個變量的聲明處;
第七步:替換CMainFrame::OnCreate()函數中m_wndToolBar 和m_wndStatusBar停靠的相關代碼;將Set/Get BarStyle改為Set/Get PaneStyle 也是文本替換一下,很簡單。將DockControlBar(&m_wndStatusBar);改為DockPane(&m_wndStatusBar);
完成以上七步,基本改造就算完成了。但是如果您現在編譯您的程序,您會發現Scribble界面基本上沒有任何改變。下面的才是更重要的,我們要添加RibbonBar了:
第一步:在CMainFrame類中聲明一個CMFCRibbonBar類型的變量m_wndRibbonBar。這個變量就代表Office2007界面里面那個替代了菜單的東東;
第二步:在CMainFrame類中聲明一個CMFCRibbonApplicationButton的變量m_MainButton。這個變量代表了Office2007界面左上角那個Home按鈕;
第三步:在CMainFrame::OnCreate函數中添加代碼。首先是創建RibbonBar對象,老規矩:
if(!m_wndRibbonBar.Create(this))
{
return -1;
}
第四步:設定m_MainButton對象:
m_MainButton.SetImage(……); //設定圖標
m_MainButton.SetToolTipText(……); //設定提示文本
m_MainButton.SetText(……); //設定按鈕文本
第五步:在CMainFrame::OnCreate函數中添加代碼,通過RibbonBar對象添加一個Category:
CMFCRibbonMainPanel *pMainPanel = m_wndRibbonBar.AddMainCategory(_T("File"));
這實際上就類似于創建了一個名為File的主菜單項;
第六步:給這個Panel添加按鈕(其實就是子菜單項):
pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN,_T("打開")));
……
第七步:
在CMainFrame::OnCreate()函數的最后部分,添加代碼設定當前界面的風格:
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007Luna_Blue);
代碼的第一行用來設定可視化管理器為Office2007類型,可供選擇的還有OfficXP、Office2003、VS2005 三種,換句話說,我們可以將我們的程序界面修改為Office2007、Office2003、OfficeXP、VS2005四種風格;
代碼的第二行用來設定Office2007界面的色調;
完成以上步驟后,就可以編譯運行啦,看看界面是不是改變了呢?
修改前:
修改后:
我沒有找到比較好看的圖標,也沒有把菜單都實現出來,僅僅是作為一個演示。相信在美工的幫助下,我們的MFC程序界面一定會漂亮起來的。
說到最后,我要提醒大家一下,發布程序前,已經要靜態鏈接MFC的庫。在現在VC8.0 的RTM尚不普及的情況下,就別指望您的用戶安裝部署了支持Feature Packe的FTM庫了。粗粗看了一下,一個用向導生成的支持Feature Pack的Application(是的,安裝了Feature Pack在用AppWizard生新程序的時候,就可以指定Feature Pack支持了),什么代碼都不加,靜態編譯一般在6M-8M之間(還算可以接受的說)。
Powered by:
C++博客
Copyright © 點點滴滴
日歷
<
2011年6月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
公告
留言簿
(9)
給我留言
查看公開留言
查看私人留言
隨筆分類
(268)
01 數學基礎(5)
02 編程語言(175)
03 編程工具(6)
04 硬件基礎(2)
05 圖像基礎(3)
06 多媒體
07 壓縮加密
08 游戲SDK(10)
09 游戲策劃(3)
10 服務器(42)
11 生活隨想(12)
12工具收集(1)
19 源碼收集(9)
隨筆檔案
(311)
2017年5月 (1)
2016年12月 (2)
2016年11月 (7)
2014年10月 (4)
2014年9月 (2)
2014年7月 (1)
2014年2月 (1)
2013年11月 (4)
2013年10月 (42)
2013年8月 (1)
2013年7月 (1)
2013年6月 (3)
2013年5月 (3)
2013年4月 (2)
2013年3月 (4)
2013年2月 (3)
2013年1月 (2)
2012年11月 (3)
2012年10月 (3)
2012年9月 (12)
2012年8月 (8)
2012年7月 (47)
2012年6月 (3)
2012年5月 (4)
2012年3月 (4)
2012年2月 (5)
2012年1月 (2)
2011年12月 (5)
2011年11月 (4)
2011年10月 (3)
2011年9月 (5)
2011年8月 (2)
2011年7月 (2)
2011年6月 (7)
2011年5月 (13)
2011年4月 (9)
2011年3月 (17)
2011年2月 (9)
2011年1月 (25)
2010年12月 (10)
2010年11月 (24)
2010年10月 (2)
相冊
blog
游戲
搜索
積分與排名
積分 - 469733
排名 - 45
最新評論
久久久99精品成人片中文字幕
|
蜜臀久久99精品久久久久久
|
久久天天躁狠狠躁夜夜不卡
|
国产aⅴ激情无码久久
|
国内精品久久久久影院优
|
国产精品热久久无码av
|
97精品久久天干天天天按摩
|
要久久爱在线免费观看
|
日本久久久久久中文字幕
|
色婷婷综合久久久中文字幕
|
伊人情人综合成人久久网小说
|
国产精品99久久久久久宅男
|
亚洲人成电影网站久久
|
97热久久免费频精品99
|
日批日出水久久亚洲精品tv
|
久久精品中文字幕第23页
|
亚洲精品无码久久久久
|
精品无码久久久久国产动漫3d
|
精品久久久久久综合日本
|
狠狠色丁香久久综合婷婷
|
国产精品中文久久久久久久
|
亚洲精品国产美女久久久
|
国内精品九九久久久精品
|
一级A毛片免费观看久久精品
|
久久美女人爽女人爽
|
99久久国产精品免费一区二区
|
久久午夜无码鲁丝片午夜精品
|
国产精品一区二区久久精品
|
亚洲香蕉网久久综合影视
|
免费一级欧美大片久久网
|
久久九色综合九色99伊人
|
国产A级毛片久久久精品毛片
|
国产成人久久精品一区二区三区
|
区久久AAA片69亚洲
|
无码乱码观看精品久久
|
久久久久国产
|
人妻中文久久久久
|
亚洲精品成人久久久
|
亚洲精品综合久久
|
亚洲午夜无码AV毛片久久
|
久久综合日本熟妇
|