日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mfc ui2

發布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mfc ui2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引用:http://www.cnblogs.com/likwo/archive/2010/10/22/1858716.html

CJLib(mfc擴展開發包,是xtreme toolkit的前生,但xtreme toolkit收費了)
http://www.codejock.com/

BCGControlBar(收費,mfc擴展開發包,功能很強大)
http://www.bcgsoft.com

SkinMagic(收費,看起來像Office)
http://appspeed.com/html/download.html

AppFace(收費,支持 mfc ,VCL,ATL , WTL 框架 )
http://www.appface.com/chs/index.htm

SKin++(收費,界面很好看)
http://www.uipower.com/

USkin(收費,界面很好看)
http://www.neemedia.com/

SYGUI(收費,mfc擴展框架)
http://www.sygui.com/

LibUIDK(部分免費,不開源,效果好,適合貼圖)
http://www.iuishop.com/download.htm

GuiToolkit(開源,mfc擴展框架)
http://www.beyondata.com/default.htm

GardenUI(免費,界面效果挺好的,XML,代碼界面分離)
http://www.gardenui.com/

?

?

http://www.codeproject.com/KB/MFC/UltimateToolbox_GUI.aspx#Background_Painter?

幾種免費的界面庫及其用法

MFC的標準界面給程序員帶來了一定的便利,但也使得用戶總是抱怨Windows的界面非常的糟糕,于是各種各樣的界面庫誕生了,從金山瑞星等公司的一系列的軟件來看,他們就有自己的界面庫。好的界面庫使用起來非常簡單,就如QQ的換膚功能,轉眼間使得軟件面貌一新。
一個好的界面庫可以大大降低編程的復雜程度,提高開發速度,保證軟件風格的一致性。為了DVBAres的開發,我考察了幾種(免費)界面庫。

1。AppFace。
AppFace在一部分軟件開發者的好評,因為它的使用實在是簡單,而且穩定性和效率都不錯,而且對于個人用戶還有免費條款,因此中文頁面上的介紹比較多。
這一款軟件在其0.x版本上還是免費的,到目前的版本上已經不免費了,只提供90天的試用期。


2。MenuXP
MenuXP這個界面庫只能作出仿OfficeXp風格的界面,使用起來也算簡單,而且很關鍵的一條,它是免費的。
參考網址:http://www.codeproject.com/menu/menuxp2.asp


3。CJ60。
CJ60原名為MFC的擴展庫,是世界著名的界面庫,網上有較多的源代碼下載,不過這個擴展庫的使用是針對MFC標準控件的,如果要研究這個界面庫,則可以參考《VC++界面一攬子方案》,其中的說明文檔對這些界面控件有較好的描述。


4。BCG。
專業版是一套非常好的MFC擴展界面庫!可以幫助你在編程時輕松制作出非常漂亮專業的自定義界面!提供100多種界面,很容易經過我們自己的重新設計組合成滿意的效果。缺點是復雜,使用起來需要一個學習的過程。

通過網上查詢,發現可用的免費的較好的界面庫非常少,大部分的曾經免費的界面庫都已經商業化。不過武愛敏手上正好有一個較老的界面庫,測試了一下,效果還可以,于是終止了費力的調查。

AppFace的介紹

AppFace For VC 支持Win9X/NT/2K/XP,UNICODE/ANSI,能夠對目標進程里的所有Widows標準控件,系統菜單,通用對話框等實現換膚,對非商業用途而言,它是完全免費的。關鍵的是AppFace的使用非常簡單,很容易添加到已有的工程中。我使用的是 0.2 版,你也可以到它的網站 http://www.appface.com 去下載最新版本。

運行效果圖如下:


AppFace 支持三種皮膚加載方式,從磁盤文件加載,從資源加載,從內存加載。下面我就說說如何從資源加載URF皮膚文件:


首先,要確保你下載了AppFace for VC 開發包,我們要用到其中的三個文件: "appface.h", "appface.dll" ,"gtclassic.urf" 。


接著,創建一個 VC 可執行文件工程, MDI/SDI/DIALOG/WIN32 類型的都可以,我以創建一個DIALOG 工程 ResSkin 進行說明。將"appface.h" 拷貝到該工程目錄下,將"Appface.dll"拷貝到該工程的輸出目錄下,例如:"debug\",將"gtclassic.urf"拷貝到資源所在目錄下。在VC 的項目管理器中進入資源管理項,在右鍵菜單中選擇"Import",將"gtclassic.urf"添加進工程,資源類型設定為: "MYRESTYPE",資源ID設定為"IDR_MY_URF"。注意:資源ID 前面一定要加雙引號 。


準備工作全部完成了,現在進入正題:
1.在ResSkin.cpp 中加入: #include "appface.h"
2.在CResSkinApp::InitInstance() 成員函數中添加如下代碼

CResSkinApp::InitInstance()
{
...
CAppFace af ; //line 1
af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,_T("MYTYPE"),NULL) ; //line 2

CResSkinDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();

...
af.Remove() ; //line 3

}

編譯... 一切搞定 !

3. 上面是官方的做法,由于appface 也支持從內存中加載urf,所以您也可以這樣做:

CResSkinApp::InitInstance()
{
...
CAppFace af ; //Init

//Load
if(HRSRC hr = ::FindResource(NULL,"IDR_MY_URF","MYTYPE"))
{
ULONG nResSize = ::SizeofResource(NULL,hr) ;
if(HGLOBAL hz = ::LoadResource(NULL,hr))
{
char* p = (char*)LockResource(hz);
if(p)
af.Start(p,GTP_LOAD_MEMORY,nResSize,NULL,NULL) ;
}
}

CResSkinDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();

...
af.Remove() ; //Release

}
你可以使用這種方法從資源中加載其它數據。


需要注意的是: 如果將URF添加進資源時,資源ID沒有用雙引號括起來, 加載時必須這樣寫:
af.Start(_T("IDR_MY_URF"),GTP_LOAD_RESOURCE,NULL,MAKEINTRESOURCE(_T("MYTYPE")),NULL)) ; //line 2

四、結束語:

也嘗試過使用其它的界面開發庫,感覺AppFace是最容易使用的,加載速度最快,穩定性也不錯。不過它的免費版只提供了三個urf皮膚文件,略為有些遺憾。歡迎轉載。
MenuxP的使用方法

隨著Windows XP和Office XP的推出,兼具華美和清爽氣質的Office XP界面風格也逐漸取代了Windows經典界面風格而成為了當前應用程序的流行“時裝”,因而如何使自己的應用程序擁有Office XP風格的界面也成為了廣大程序員感興趣的問題。為此法國程序員Jean-Michel LE FOL針對于Visual C++編寫了CMenuXP類,使用CMenuXP類就可以輕松使自己的應用程序擁有Office XP風格的界面。下面我就以詳細介紹一下使用CMenuXP的步驟。

首先新建一個名叫“SDIXP”的單文檔的MFC應用程序。在我們能使用CMenuXP之前,必須進行一下幾步操作:

1.??????? 將CMenuXP的源文件和頭文件所在的文件夾(一般放在名叫“Tools”)放到SDIXP源文件的目錄下。

2.??????? 將Visual C++切換到“文件視圖(FileView)”,加入CMenuXP的源文件和頭文件。具體可以這樣進行:在FileView的樹狀目錄下,展開SDI files,在Source Files目錄上點擊右鍵,創建新目錄(“New Folder…”),不妨取名叫“Tools”,再在Tools目錄上點擊右鍵,選擇加入文件(“Add Files to Folder…”),將Tools文件夾下的所有源文件(*.cpp)全部加進來。同理,在文件視圖的Header Files目錄下新建一個叫做“Tool Headers”,再將Tools文件夾下的所有頭文件(*.h)全部加到Tool Headers目錄里。

3.??????? (1)在控制菜單的類的頭文件(對于SDI程序通常是MainFrm.h)里加入所需要的CMenuXP類的頭文件名:

?????? #include "Tools/MenuXP.h"
?????? #include "Tools/ToolBarXP.h"
?????? #include "Tools/StatusBarXP.h"
?????? #include "Tools/ComboBoxXP.h"
再在MainFrm.h里加入下面的宏:

?????? DECLARE_MENUXP()
上述語句可以加在CMainFrame類聲明里的宏定義“DECLARE_MESSAGE_MAP()”的后面。

(2)在控制菜單的類的源文件(MainFrm.cpp)里加入:

?????? IMPLEMENT_MENUXP(類名, 基類名);
?????????? 對于SDI工程就是

?????? IMPLEMENT_MENUXP(CMainFrame, CFrameWnd);
上述語句加在CMainFrame開頭的“IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)”后面。

?????????? (3)接著繼續在消息映射里如下加入:

?????? BEGIN_MESSAGE_MAP(className, baseClass)
?????? // ...
??????? ON_MENUXP_MESSAGES() //加入這一行
?????? END_MESSAGE_MAP()


(4)在繼承于CWinApp的類(這里就是CSDIXPApp)中的InitInstance()函數里加入:

?????? CMenuXP::InitializeHook();
可以加在“AfxEnableControlContainer();”語句后面。

然后再為CSDIXPApp類重載ExitInstance()函數,可以在“類視圖(ClassView)”里點右鍵加入。再在ExitInstance()函數里加入:

?????? CMenuXP::UninitializeHook();


以上步驟做完之后可以按F7編譯一下,如果一切沒有問題我們就可以開始使用CMenuXP來美化我們的菜單和工具欄了。

首先,我們來將菜單和菜單項XP化。這很簡單,只要在CMainFrame:: OnCreate()函數里加入:

?? CMenuXP::UpdateMenuBar(this);
?? CMenuXP::SetXPLookNFeel(this);
就OK了。現在你編譯運行一下,看看你的程序菜單是不是改頭換面了?

如果你想為自己菜單項定制圖標,我們可以用CMenuXP::SetMenuItemImage (UNIT nID, HIMAGELIST hImgList, int nIndex)函數來實現。為此,我們新建一個菜單“水果”和菜單項“蘋果”(ID設置為ID_MENUITEM_APPLE),打開 ClassWizard為ID_MENUITEM_APPLE添加消息處理函數OnMenuitemApple()。然后再導入一個位圖資源 “APPLE.bmp”,其ID設置為IDB_APPLE。

接著我們為CMainFrame添加CImageList類型的成員變量m_imgList,再在CMainFrame:: OnCreate()函數的“CMenuXP::SetXPLookNFeel (this);”后面加入:

?? m_imgList.Create(IDB_APPLE, 0, 0, #c0c0c0);
?? CMenuXP::SetMenuItemImage(ID_MENUITEM_APPLE, m_imgList, 0);
其中m_imgList.Create()函數中的第2,3個參數是位圖文件的圖像拷貝的左上角坐標,最后一個參數是圖像的背景色。建議使用16×16的位圖。SetMenuItemImage()函數的最后一個參數指的是m_imgList的中元素的索引,這里因為m_imgList.只包含一個位圖,故取零。編譯后運行,看看“水果|蘋果”菜單項前面是不是多了一個蘋果的圖標?

下面我們在將使工具欄和狀態欄XP化,這個更加easy了。只要將CMainFrame類聲明中的

?? CStatusBar m_wndStatusBar;
?? CToolBar m_wndToolBar;
變成

?? CStatusBarXP m_wndStatusBar;
?? CToolBarXP m_wndToolBar;
就搞定了!不信,你編譯運行一下看看,^_*

CMenuXP還可以將按鈕和下拉列表框變成Office XP風格的。為此我們新建一個對話框IDD_APPLE。OK和Cancel按鈕保持不動,我們只增添一個下拉列表框控件IDC_COMBO1。然后按 Ctrl+W打開ClassWizard為該對話框新建一個CAppleDlg類。再在ClassWizard中的Member Variable里為IDC_COMBO1添加Control類型的變量m_cmbx1。接著為CAppleDlg重載OnInitDialog()用以初始化控件:

?? BOOL CAppleDlg::OnInitDialog()
{
?? CDialog::OnInitDialog();
?? m_cmbx1.AddString("紅蘋果");
?? m_cmbx1.AddString("青蘋果");
?? return TRUE;
}
然后在“蘋果”菜單項的消息處理函數中使蘋果對話框彈出:

?? void CMainFrame::OnMenuitemApple()
{
?? // TODO: Add your command handler code here
?? CAppleDlg dialog;
?? dialog.DoModal();
}
如果這時編譯運行,就會看到打開“水果|蘋果”菜單項后彈出一個對話框,但上面的控件還不是Office XP風格的,下面我們就著手使其XP化,其實這同樣也是很easy的!

先在AppleDlg.h文件中包含"Tools/ComboBoxXP.h"和"Tools/ButtonXP.h",再找到定義m_cmbx1的位置,將

?? CComboBox m_cmbx1;
變成

?? CComboBoxXP m_cmbx1;
這樣下拉列表框就有XP風格了,不信你編譯運行試試。關于OK和Cancel按鈕就稍微特殊一點,因為它們是直接用IDOK和IDCANCEL標識的默認按鈕,但為了使它們XP化,我們還是得為這兩個按鈕添加控制變量。因此,在CAppleDlg類的聲明中添加:

?? CButtonXP m_btnOK;
?? CButtonXP m_btnCancel;
再在CAppleDlg::DoDataExchange()函數中添加數據交換:

?? DDX_Control(pDX, IDOK, m_btnOK);
?? DDX_Control(pDX, IDCANCEL, m_btnCancel);
這樣,OK和Cancel按鈕也都XP化了。大家編譯運行一下,看看效果怎么樣。

總之,使用Jean-Michel LE FOL的CMenuXP給用Visual C++開發的應用程序換上Office XP風格的界面還是很不錯的,操作起來也比較簡便。唯一不足的就是其他許多控件,如文本框等還是沒有Office XP風格,這就期待著原作者以及我們大家繼續完善CMenuXP類。

總結

以上是生活随笔為你收集整理的mfc ui2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。