应用程序迁移至Xtreme Toolkit pro

来源:百度文库 编辑:神马文学网 时间:2024/04/20 15:21:41
 
应用程序迁移至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 改为#include ,例如:

#include // 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;
}