<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在MS Visual Studio 2008 MFC中Ribbon界面風格出現了,這種界面風格給人帶來耳目一新的感覺。Ribbon界面風格出現,可以說改革了傳統的菜單式界面風格,常見的應用就是MS Office 2007中的Word、Excel、PowerPoint等組件中,Ribbon不僅使得功能有組織的存放,而且可以更加方便快捷地找到各個功能。但是MS Visual Studio 2008 MFC中還未加入Ribbon編程的相關組件,這意味著不會是那種想要什么控件就托到相應的位置就可以了,而是要完全通過代碼來生成和控制相關的組件。值得然人欣喜的是,在MS Visual Studio 2010 MFC中,Ribbon編程相關的組件已經被添加了進來,這樣一來Ribbon編程就變得容易了起來,可以達到“所見即所得”的效果了。 下面結合MS Visual Studio 2008 MFC中Ribbon編程的一個實例,詳細講述Ribbon編程的具體步驟和注意事項,同時還將提出一種SDI(單文檔界面)架構程序中進行多個視圖切換的方法。(完整的實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/6408275](http://download.csdn.net/detail/margin1988/6408275)): ⑴??MS Visual Studio 2008 MFC中創建SDIRibbon應用程序的步驟: 1)“新建”一個Visual C++ MFC應用程序項目: ![](https://box.kancloud.cn/2016-08-31_57c6b4a4c3c0b.jpg) 2)“確定”后進入MFC應用程序向導,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a4db700.jpg) 3)進入到應用程序類型界面,選擇“單文檔”、“Office”、“Office 2007(黑色主題)”,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a51f63a.jpg) 4)進入復合文檔支持,選擇“無”,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a55a9d0.jpg) 5)進入文檔模板字符串,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a58eea3.jpg) 6)進入數據庫支持,選擇“無”,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a5c2bd7.jpg) 7)進入用戶界面功能,按下圖所示選擇后,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a606aed.jpg) 8)進入高級功能,勾去所有的高級功能,如下圖,單擊“下一步”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a63c47b.jpg) 9)進入生成的類,選擇基類“CFormView”,單擊“完成”: ![](https://box.kancloud.cn/2016-08-31_57c6b4a6955df.jpg) 10)完成后,直接編譯運行程序,得到的界面如下入: ![](https://box.kancloud.cn/2016-08-31_57c6b4a6d2bcd.jpg) (2)Ribbon界面風格的主要構成分析: ![](https://box.kancloud.cn/2016-08-31_57c6b4a71c423.jpg) Ribbon應用程序的主體框架構成從大到小包含如上圖中所示的三大塊:分類(CMFCRibbonCategory)、面板(CMFCRibbonPanel)、元素(包括:CMFCRibbonButton、CMFCRibbonEdit等)。 (3)如何創建屬于自己的Ribbon界面表現形式: 1)使用繪圖、PS等工具繪制自己的按鈕圖標(PNG),并放在工程的res目錄下,然后將其導入工程資源: ![](https://box.kancloud.cn/2016-08-31_57c6b4a79a9e6.jpg) ![](image/d41d8cd98f00b204e9800998ecf8427e.jpg) 2)在MainFrm.cpp文件的InitializeRibbon()函數中,仿照默認生成的代碼編寫自己的Ribbon界面表現形式,刪除自動生成的你不需要的代碼: A.添加資源符號: 在String Table中添加分類和面板資源符號: ![](https://box.kancloud.cn/2016-08-31_57c6b4a7b7fe9.jpg) ![](image/d41d8cd98f00b204e9800998ecf8427e.jpg) 在Accelerator中添加元素資源快捷鍵: ![](https://box.kancloud.cn/2016-08-31_57c6b4a7cc021.jpg) B.依次創建“分類->面板->元素”: ~~~ //創建“分類”-模塊1 bNameValid = strTemp.LoadString(IDS_RIBBON_MODULAR1); ASSERT(bNameValid); CMFCRibbonCategory* pCategoryHomeMod1 = m_wndRibbonBar.AddCategory(strTemp,IDB_PNG3,IDB_PNG2,CSize(28,25),CSize(56,50)); //創建“面板”-用戶管理和“元素”-按鈕 bNameValid = strTemp.LoadString(IDS_RIBBON_USERMANAGER); ASSERT(bNameValid); CMFCRibbonPanel* pPanelUserManager = pCategoryHomeMod1->AddPanel(strTemp, m_PanelImages.ExtractIcon(7));//有個子圖標(索引~) CMFCRibbonButton* pBtnUserManager = new CMFCRibbonButton(ID_EDIT_USERMANAGER,_T(""), 0,0);//加載的第一個(索引) pPanelUserManager->Add(pBtnUserManager); ~~~ 3)添加相應消息響應函數,使面板元素激活可用: ~~~ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx) ON_COMMAND(ID_EDIT_USERMANAGER, OnUserManagerCommand) ON_COMMAND(ID_EDIT_PARAMCONFIG, OnParamConfigCommand) //消息響應宏 END_MESSAGE_MAP() ~~~ 4)最終自定義的Ribbon界面表現形式如下圖: ![](https://box.kancloud.cn/2016-08-31_57c6b4a7e864b.jpg) (4)SDI(單文檔界面)架構想要實現多個視圖之間的切換,需要定義一個切換視圖的函數——void SwitchToForm(int nForm);該函數的實現體如下: ★聲明全局變量**frmID:** 在stdafx.h中添加聲明:extern int frmID; 在stdafx.cpp中添加定義:int frmID; 在C工程名.cpp中的InitInstance()中初始化:frmID = 0; ~~~ void CMainFrame::SwitchToForm(int nForm) {//進行視圖切換的代碼函數 if (nForm!=frmID) { frmID=nForm;//避免多次點擊同一按鈕時出現的錯誤,一按鈕點擊一次后,第二次點擊不做任何處理。 CDocument* pDoc = GetActiveDocument(); CView *pOldActiveView=GetActiveView();//保存舊視圖 CView *pNewActiveView=(CView*)GetDlgItem(nForm);//取得新視圖 if(pNewActiveView==NULL) { switch(nForm){ case IDD_USERMANAGER_FORM ://視圖資源符號 pNewActiveView=(CView*)new CPoint19View; break; case IDD_PARAMCONFIG_FORM ://視圖資源符號 pNewActiveView=(CView*)new CParamConfig; break; } CCreateContext context; //將文擋和視圖相連 context.m_pCurrentDoc=pOldActiveView->GetDocument(); pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD, CFrameWnd::rectDefault, this, nForm, &context); pNewActiveView->OnInitialUpdate(); } SetActiveView(pNewActiveView); //改變活動的視圖 pNewActiveView->ShowWindow(SW_SHOW); //顯示新的視圖 pOldActiveView->ShowWindow(SW_HIDE); //隱藏舊的視圖 if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CPoint19View)) pOldActiveView->SetDlgCtrlID(IDD_USERMANAGER_FORM); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CParamConfig)) pOldActiveView->SetDlgCtrlID(IDD_PARAMCONFIG_FORM); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); delete pOldActiveView; //刪除舊視圖 RecalcLayout();//調整框架窗口 } } ~~~ 調用方式如下: ~~~ void CMainFrame::OnUserManagerCommand(){ SwitchToForm(IDD_USERMANAGER_FORM); } void CMainFrame::OnParamConfigCommand(){ SwitchToForm(IDD_PARAMCONFIG_FORM); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看