应用程序迁移至Xtreme Toolkit pro
2009-01-19 15:49:43 专业版中的很多组件,比如toolbars,menubars和docking windows等与标准版有很大的
不同。这是因为新的架构作了相当大的改变,提供了很多新的增强的特色。 本迁移向导试图揭示这些异同以提供帮助,使你在迁移标准版的程序到专业版上时 更容易一些。 以下是这篇文章的所涉及的主题: 准备你的程序 开始 command bar的初始化 menubar的创建 toolbar的创建 dock window的创建 添加对toolbar和menu的定制 添加智能菜单 为应用程序添加一个theme 准备你的应用程序 首先你要做的是改变你的StdAfx.h文件中的include文件。这个文件常用来引进 所有的toolkit的类定义并把你的程序连接到toolkit。你需要打开你的StdAfx.h文件, 把#include <XTToolKit.h>改为#include <XTPToolkit.h>,例如: #include <XTToolkitPro.h> // Xtreme Toolkit Pro components 重新命名你的基类 下来你需要改变一些基类。你得把所有出现的CXT…改为C…,比如在一个MDI程序中, CXTMDIChildWnd要变成CMDIChildWnd,CXTMDIFrameWnd要变成CMDIFrameWnd。 对一个SDI程序,CXTFrameWnd要变成CFrameWnd。下面是一个所有需要改变为起初的 MFC命名惯例的类的列表。这是你的程序返 回到迁移时的一个好的起点。 Toolkit Class Name MFC Class Name (rename to) CXTFrameWnd CFrameWnd CXTMDIChildWnd CMDIChildWnd CXTMDIFrameWnd CMDIFrameWnd CXTOleIPFrameWnd COleIPFrameWnd CXTControlBar CControlBar CXTDialogBar CDialogBar CXTReBar CReBar CXTReBarCtrl CReBarCtrl 其他缺失的类 以下的类在Xtreme Toolkit的专业版中不再出现。在新的体系中,他们或是被代替或 是被废弃。这些类中的大多数你不能再直接使用;但在这里把它们列出来作为你的参 考: Toolkit Class Name CXTAccelSwapOutItemList CXTCustOptions CXTPopupTearOffWnd CXTAccelManager CXTCustomizeSheet CXTPopupColorTearOff CXTCBarDialog CXTDockBar CXTPopupToolbarTearOff CXTCommandsListBox CXTDockColorSelector CXTPreviewView CXTItemData CXTDockContext CXTSplitterDock CXTCoolMenu CXTDockWindow CXTSplitterRowDock CXTMenu CXTFrameImpl CXTToolBar CXTCustomToolBar CXTString CXTToolBarCtrl CXTCustToolBarPage CXTMenuBarItem CXTPopupWndToolbar CXTCustCommandsPage CXTMenuBar CXTToolBarPopupWndHook CXTCustAccelerators CXTMiniDockFrameWnd CXTToolBarPopupWnd CXTCustTools CXTNewToolbarDlg CXTToolsManager 开始 改变你的主框架的继承关系 现在你的程序已经不再涉及标准版本的东西了,我们可以开始迁移了。现在你已经 更新了你的StdAfx.h文件,在你的MainFrm.h文件中改变你的基类为CXTPMDIFrameWnd (对MDI程序)和CXTPFrameWnd(对SDI程序): class CMainFrame : public CXTPMDIFrameWnd { ... }; 如果你重载了PreTranslateMessage请确保你调用了CXTPMDIFrameWnd基类,例如: BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class return CXTPMDIFrameWnd::PreTranslateMessage(pMsg); } 另外,如果你重载了OnCmdMsg请确保你调用了CXTPMDIFrameWnd基类,例如: BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // TODO: Add your specialized code here and/or call the base class return CXTPMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } Command bar的初始化 Command bar在使用之前必须进行初始化,而且它们必须在所有的control bar对象( 比如你的statusbar)创建之后再被创建。这是你为command bar设置theme的好地方。 在标准版中你需要调用xtAfxData.bXPMode = true;设置theme为Office XP。在专业版中 对每个组件你有theme managers。这允许你定义你自己的theme或者选用toolkit中已定义的theme。 这是一个如何初始化controlbar的例子: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Create Status bar. // Important: All control bars including the Status Bar // must be created before CommandBars.... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // Initialize the command bars if (!InitCommandBars()) return -1; // Get a pointer to the command bars object. CXTPCommandBars* pCommandBars = GetCommandBars(); if(pCommandBars == NULL) { TRACE0("Failed to create command bars object.\n"); return -1; // fail to create } // Set Office 2003 Theme CXTPPaintManager::SetTheme(xtpThemeOfficeXP); return 0; } 使用coolmenu请注意: 在应用程序中不再有必要调用InstallCoolMenus初始化菜单的theme。 这由commandbar的theme manager来处理。 menubar的创建 你需要更改你的代码使用pro版本的menubar。使用了标准版toolkit的程序参 考CMainFrame::OnCreate的CXTMenuBar对象。在这里m_wndMenuBar对象被创建, 允许停靠被调用使menubar可以停靠在程序的工作区。在专业版中做法有些不同, 没必要调用允许停靠了,例如: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Create Status bar. // Important: All control bars including the Status Bar // must be created before CommandBars.... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // Initialize the command bars if (!InitCommandBars()) return -1; // Get a pointer to the command bars object. CXTPCommandBars* pCommandBars = GetCommandBars(); if(pCommandBars == NULL) { TRACE0("Failed to create command bars object.\n"); return -1; // fail to create } // Add the menu bar CXTPCommandBar* pMenuBar = pCommandBars->SetMenu( _T("Menu Bar"), IDR_MDISAMTYPE); if(pMenuBar == NULL) { TRACE0("Failed to create menu bar.\n"); return -1; // fail to create } // Remove the old menu bar code... // if (!m_wndMenuBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP // | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || // !m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME)) // { // TRACE0("Failed to create menubar\n"); // return -1; // fail to create // } // m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); // EnableDocking(CBRS_ALIGN_ANY); // DockControlBar(&m_wndMenuBar); return 0; } toolbar的创建 你需要更改你的代码去使用pro版本的toolbar。相对于menubar,toolbar对象通常 在CMainFrame::OnCreate中创建,而且调用允许停靠使toolbar停靠到程序的工作区。 Toolbar采用和menubar使用toolbar资源相似的创建方式,例如: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Create Status bar. // Important: All control bars including the Status Bar // must be created before CommandBars.... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // Initialize the command bars if (!InitCommandBars()) return -1; // Get a pointer to the command bars object. CXTPCommandBars* pCommandBars = GetCommandBars(); if(pCommandBars == NULL) { TRACE0("Failed to create command bars object.\n"); return -1; // fail to create } // Add the menu bar CXTPCommandBar* pMenuBar = pCommandBars->SetMenu( _T("Menu Bar"), IDR_MDISAMTYPE); if(pMenuBar == NULL) { TRACE0("Failed to create menu bar.\n"); return -1; // fail to create } // Create ToolBar CXTPToolBar* pToolBar = (CXTPToolBar*) pCommandBars->Add(_T("Standard"), xtpBarTop); if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } // Remove the old tool bar code... // if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP // | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || // !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) // { // TRACE0("Failed to create toolbar\n"); // return -1; // fail to create // } // m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); // EnableDocking(CBRS_ALIGN_ANY); // DockControlBar(&m_wndToolBar); return 0; } |
|
来自: Frank_Chia > 《.NET》