亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        在VC中用CMenuXP使應(yīng)用程序擁有OfficeXP風(fēng)格

        字號(hào):

        隨著Windows XP和Office XP的推出,兼具華美和清爽氣質(zhì)的Office XP界面風(fēng)格也逐漸取代了Windows經(jīng)典界面風(fēng)格而成為了當(dāng)前應(yīng)用程序的流行“時(shí)裝”,因而如何使自己的應(yīng)用程序擁有Office XP風(fēng)格的界面也成為了廣大程序員感興趣的問(wèn)題。為此法國(guó)程序員Jean-Michel LE FOL針對(duì)于Visual C++編寫(xiě)了CMenuXP類,使用CMenuXP類就可以輕松使自己的應(yīng)用程序擁有Office XP風(fēng)格的界面。下面我就以詳細(xì)介紹一下使用CMenuXP的步驟。
            首先新建一個(gè)名叫“SDIXP”的單文檔的MFC應(yīng)用程序。在我們能使用CMenuXP之前,必須進(jìn)行一下幾步操作:
            1.將CMenuXP的源文件和頭文件所在的文件夾(一般放在名叫“Tools”)放到SDIXP源文件的目錄下。
            2.將Visual C++切換到“文件視圖(FileView)”,加入CMenuXP的源文件和頭文件。具體可以這樣進(jìn)行:在FileView的樹(shù)狀目錄下,展開(kāi)SDI files,在Source Files目錄上點(diǎn)擊右鍵,創(chuàng)建新目錄(“New Folder…”),不妨取名叫“Tools”,再在Tools目錄上點(diǎn)擊右鍵,選擇加入文件(“Add Files to Folder…”),將Tools文件夾下的所有源文件(*.cpp)全部加進(jìn)來(lái)。同理,在文件視圖的Header Files目錄下新建一個(gè)叫做“Tool Headers”,再將Tools文件夾下的所有頭文件(*.h)全部加到Tool Headers目錄里。
            3.(1)在控制菜單的類的頭文件(對(duì)于SDI程序通常是MainFrm.h)里加入所需要的CMenuXP類的頭文件名:
             #include “Tools/MenuXP.h“
             #include “Tools/ToolBarXP.h“
             #include “Tools/StatusBarXP.h“
             #include “Tools/ComboBoxXP.h“
            再在MainFrm.h里加入下面的宏:DECLARE_MENUXP()
            上述語(yǔ)句可以加在CMainFrame類聲明里的宏定義“DECLARE_MESSAGE_MAP()”的后面。
            (2)在控制菜單的類的源文件(MainFrm.cpp)里加入:IMPLEMENT_MENUXP(類名, 基類名);
            對(duì)于SDI工程就是 IMPLEMENT_MENUXP(CMainFrame, CFrameWnd);
             上述語(yǔ)句加在CMainFrame開(kāi)頭的“IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)”后面。
            (3)接著繼續(xù)在消息映射里如下加入:
             BEGIN_MESSAGE_MAP(className, baseClass)
             // ...
             ON_MENUXP_MESSAGES() //加入這一行
             END_MESSAGE_MAP()
            (4)在繼承于CWinApp的類(這里就是CSDIXPApp)中的InitInstance()函數(shù)里加入:
            CMenuXP::InitializeHook();
            可以加在“AfxEnableControlContainer();”語(yǔ)句后面。
            然后再為CSDIXPApp類重載ExitInstance()函數(shù),可以在“類視圖(ClassView)”里點(diǎn)右鍵加入。再在ExitInstance()函數(shù)里加入:
            CMenuXP::UninitializeHook();
            以上步驟做完之后可以按F7編譯一下,如果一切沒(méi)有問(wèn)題我們就可以開(kāi)始使用CMenuXP來(lái)美化我們的菜單和工具欄了。
            首先,我們來(lái)將菜單和菜單項(xiàng)XP化。這很簡(jiǎn)單,只要在CMainFrame:: OnCreate()函數(shù)里加入:
            CMenuXP::UpdateMenuBar(this);
            CMenuXP::SetXPLookNFeel(this);
            就OK了?,F(xiàn)在你編譯運(yùn)行一下,看看你的程序菜單是不是改頭換面了?
            如果你想為自己菜單項(xiàng)定制圖標(biāo),我們可以用CMenuXP::SetMenuItemImage (UNIT nID, HIMAGELIST hImgList, int nIndex)函數(shù)來(lái)實(shí)現(xiàn)。為此,我們新建一個(gè)菜單“水果”和菜單項(xiàng)“蘋(píng)果”(ID設(shè)置為ID_MENUITEM_APPLE),打開(kāi)ClassWizard為ID_MENUITEM_APPLE添加消息處理函數(shù)OnMenuitemApple()。然后再導(dǎo)入一個(gè)位圖資源“APPLE.bmp”,其ID設(shè)置為IDB_APPLE。
            接著我們?yōu)镃MainFrame添加CImageList類型的成員變量m_imgList,再在CMainFrame:: OnCreate()函數(shù)的“CMenuXP::SetXPLookNFeel (this);”后面加入:
            m_imgList.Create(IDB_APPLE, 0, 0, RGB(192,192,192));
            CMenuXP::SetMenuItemImage(ID_MENUITEM_APPLE, m_imgList, 0);
            其中m_imgList.Create()函數(shù)中的第2,3個(gè)參數(shù)是位圖文件的圖像拷貝的左上角坐標(biāo),最后一個(gè)參數(shù)是圖像的背景色。建議使用16×16的位圖。SetMenuItemImage()函數(shù)的最后一個(gè)參數(shù)指的是m_imgList的中元素的索引,這里因?yàn)閙_imgList.只包含一個(gè)位圖,故取零。編譯后運(yùn)行,看看“水果|蘋(píng)果”菜單項(xiàng)前面是不是多了一個(gè)蘋(píng)果的圖標(biāo)?
            下面我們?cè)趯⑹构ぞ邫诤蜖顟B(tài)欄XP化,這個(gè)更加easy了。只要將CMainFrame類聲明中的
            CStatusBar m_wndStatusBar;
            CToolBar m_wndToolBar;
            變成
            CStatusBarXP m_wndStatusBar;
            CToolBarXP m_wndToolBar;
            就搞定了!不信,你編譯運(yùn)行一下看看
            CMenuXP還可以將按鈕和下拉列表框變成Office XP風(fēng)格的。為此我們新建一個(gè)對(duì)話框IDD_APPLE。OK和Cancel按鈕保持不動(dòng),我們只增添一個(gè)下拉列表框控件IDC_COMBO1。然后按Ctrl+W打開(kāi)ClassWizard為該對(duì)話框新建一個(gè)CAppleDlg類。再在ClassWizard中的Member Variable里為IDC_COMBO1添加Control類型的變量m_cmbx1。接著為CAppleDlg重載OnInitDialog()用以初始化控件:
             BOOL CAppleDlg::OnInitDialog()
             {
             CDialog::OnInitDialog();
             m_cmbx1.AddString(“紅蘋(píng)果“);
             m_cmbx1.AddString(“青蘋(píng)果“);
             return TRUE;
             }
             然后在“蘋(píng)果”菜單項(xiàng)的消息處理函數(shù)中使蘋(píng)果對(duì)話框彈出:
             void CMainFrame::OnMenuitemApple()
             {
             // TODO: Add your command handler code here
             CAppleDlg dialog;
             dialog.DoModal();
             }
            如果這時(shí)編譯運(yùn)行,就會(huì)看到打開(kāi)“水果|蘋(píng)果”菜單項(xiàng)后彈出一個(gè)對(duì)話框,但上面的控件還不是Office XP風(fēng)格的,下面我們就著手使其XP化,其實(shí)這同樣也是很easy的!
            先在AppleDlg.h文件中包含“Tools/ComboBoxXP.h“和“Tools/ButtonXP.h“,再找到定義m_cmbx1的位置,將 CComboBox m_cmbx1; 變成 CComboBoxXP m_cmbx1;
            這樣下拉列表框就有XP風(fēng)格了,不信你編譯運(yùn)行試試。關(guān)于OK和Cancel按鈕就稍微特殊一點(diǎn),因?yàn)樗鼈兪侵苯佑肐DOK和IDCANCEL標(biāo)識(shí)的默認(rèn)按鈕,但為了使它們XP化,我們還是得為這兩個(gè)按鈕添加控制變量。因此,在CAppleDlg類的聲明中添加:
             CButtonXP m_btnOK;
             CButtonXP m_btnCancel;
             再在CAppleDlg::DoDataExchange()函數(shù)中添加數(shù)據(jù)交換:
             DDX_Control(pDX, IDOK, m_btnOK);
             DDX_Control(pDX, IDCANCEL, m_btnCancel);
            這樣,OK和Cancel按鈕也都XP化了。大家編譯運(yùn)行一下,看看效果怎么樣。
            總之,使用Jean-Michel LE FOL的CMenuXP給用Visual C++開(kāi)發(fā)的應(yīng)用程序換上Office XP風(fēng)格的界面還是很不錯(cuò)的,操作起來(lái)也比較簡(jiǎn)便。不足的就是其他許多控件,如文本框等還是沒(méi)有Office XP風(fēng)格,這就期待著原作者以及我們大家繼續(xù)完善CMenuXP類。