<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      Office 2000風格的停泊、自動選擇型菜單

      [摘要]譯者:徐景周(原著:Piero Viano)下載演示源碼(http://www.vckbase.com/vckbase/vckbase12/vc/ctrls/menu_07/1207099.htm)...
      譯者:徐景周(原著:Piero Viano)

      下載演示源碼(http://www.vckbase.com/vckbase/vckbase12/vc/ctrls/menu_07/1207099.htm)

      (譯者注:由于原文作者所提供例子代碼需使用附帶RC資源,經本人使用后覺得不夠通用,故將部分源碼修改并將文章翻譯。文中現在所附例子為我最近所作一抓圖程序的界面部分。不光Office 2000智能菜單噢!還包括多文檔視圖的TAB頁顯示,自繪制菜單等,詳情請參看附帶實例代碼。我的EMAIL是:jingzhou_xu@163.net ~O~)

      在你的工程文件中使用Office 2000菜單的話(譯者:目前僅支持多文檔菜單修改,如果要改單文檔菜單界面的話,可對文件中的CMultiDocTemplateEx類、CMDIFrameEx類和CMDIFrameEx類進行修改,以適應單文檔界面。),請按下面步驟進行:

      在資源里的字符串表中新增二字符串:一、ID_SHOWFULL ,32792,顯示完全菜單。二、ID_INTMODE,32794,打開/禁止智能菜單模式。
      將OffMenu文件夾中每一個.cpp和.h文件包含井你的工程文件中。
      編輯工程文件中的 MainFrm.h (主框架頭文件) :
      將原類的聲明從:

      class CMainFrame : public CMDIFrameWnd

      改為:

      #include "MDIFrmEx.h"
      #include "ToolBarEx.h"

      class CMainFrame : public CMDIFrameEx

      接著將類中的工具條類從 CToolBar 改為 CToolbarEx:

      CToolbar m_wndToolBar;

      變成:

      CToolbarEx m_wndToolBar;


      編輯工程文件中的 MainFrm.cpp (主框架文件):
      改變其中消息映射從:

      IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
      BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

      變成:

      IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameEx)
      BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameEx)

      接著將 CMainFrame::OnCreate 中的:

      if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

      變為:

      if (CMDIFrameEx::OnCreate(lpCreateStruct) == -1)


      編輯工程文件中 MyApp.h (應用類頭文件):
      改變其中的類聲明從:

      class CTestMDIApp : public CWinApp

      變為:

      #include "WinAppEx.h"

      class CTestMDIApp : public CWinAppEx


      編輯工程文件中 MyApp.cpp (應用類文件):
      將其中的消息映射從:

      BEGIN_MESSAGE_MAP(CTestMDIApp, CWinApp)

      變為:

      #include "DocTplEx.h"

      BEGIN_MESSAGE_MAP(CTestMDIApp, CWinAppEx)

      接著將 CMyApp::InitInstance() 中的下面代碼從:

               CMultiDocTemplate* pDocTemplate;
               pDocTemplate = new CMultiDocTemplate(
                       IDR_TESTMDTYPE,
                       RUNTIME_CLASS(CTestMDIDoc),
                       // custom MDI child frame
                       RUNTIME_CLASS(CChildFrame),
                       RUNTIME_CLASS(CTestMDIView));
               AddDocTemplate(pDocTemplate);

               // create main MDI Frame window
               CMainFrame* pMainFrame = new CMainFrame;
               if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
                       return FALSE;
               m_pMainWnd = pMainFrame;

      替換成:

               UINT nID;
               nID=IDR_MAINFRAME;

               // create main MDI Frame window
               CMainFrame* pMainFrame = new CMainFrame;
               if (!pMainFrame->LoadFrame(nID))
                       return FALSE;
               m_pMainWnd = pMainFrame;

               CMultiDocTemplateEx* pDocTemplate;
               pDocTemplate = new CMultiDocTemplateEx(
                       IDR_TESTMDTYPE,
                       RUNTIME_CLASS(CTestMDIDoc),
                       // custom MDI child frame
                       RUNTIME_CLASS(CChildFrame),
                       RUNTIME_CLASS(CTestMDIView),
                       &nID,1);
               AddDocTemplate(pDocTemplate);

               CWinAppEx::InitInstance();


      接下來就可以編釋并運行你的程序了。
      如果你想自己掌控智能菜單的話,可直接重載CmenuBar類中的下面涵數既可:

      WORD CMenuBar::IncMenuUsage(CMenuEx *pParent,
                                  UINT pos,
                                  WORD curusage)

      BOOL CMenuBar::EvaluateIfGrayed(CMenuEx *pParent,
                                      UINT pos,
                                      WORD &curusage,
                                      int iMed,
                                      int iRange)
      第一個涵數用來添加當前菜單條有用法。第二個涵數決定當前菜單條是否灰色顯示,它也可用來修改當前菜單條的用法。如果你想在菜單中存儲應用程序中定義的數據的話,可用CMenuEx::GetExtraDataPtr(UINT)來包含進這些數據。


      日韩精品一区二区三区高清