XtremeToolkitPro使用方法.doc_第1页
XtremeToolkitPro使用方法.doc_第2页
XtremeToolkitPro使用方法.doc_第3页
XtremeToolkitPro使用方法.doc_第4页
XtremeToolkitPro使用方法.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XTToolkitPro使用初探创建MFC的SDI或MDI应用程序在stdafx.h添加 #include / Xtreme Toolkit Pro component library修改的CMainFrame基类,对应为CXTPMDIFrameWndclass CMainFrame : public CXTPFrameWnd修改CMainFrame:OnCreate函数 注释掉原有的,添加下列代码 if (!InitCommandBars() return -1; CXTPCommandBars* pCommandBars = GetCommandBars(); if(pCommandBars = NULL) TRACE0(Failed to create command bars object.n); return -1; / fail to create CXTPCommandBar* pMenuBar = pCommandBars-SetMenu( _T(Menu Bar), IDR_MAINFRAME); if(pMenuBar = NULL) TRACE0(Failed to create menu bar.n); return -1; / fail to create CXTPToolBar* pToolBar = (CXTPToolBar*)pCommandBars-Add(_T(Standard), xtpBarTop); if (!pToolBar | !pToolBar-LoadToolBar(IDR_MAINFRAME) TRACE0(Failed to create toolbarn); return -1; CXTPPaintManager:SetTheme(xtpThemeOffice2003);编译运行,出现Offiice 2003主题风格的应用程序 资源包含,查看rc2资源文件代码,添加xttoolkitpro.rc,在资源附加目录中添加xttoolkitpro.rc所在目录使用的时候,只需要在StdAfx.h中加入下面的语句即可#include 如果你选择static link,那么可以使用宏把不需要的部分排除掉,这样能减少最终生成的EXE的大小/#define _XTP_EXCLUDE_COMMON#define _XTP_EXCLUDE_TABMANAGER#define _XTP_EXCLUDE_GRAPHICLIBRARY/#define _XTP_EXCLUDE_CONTROLS/#define _XTP_EXCLUDE_COMMANDBARS/#define _XTP_EXCLUDE_DOCKINGPANE/#define _XTP_EXCLUDE_PROPERTYGRID#define _XTP_EXCLUDE_REPORTCONTROL#define _XTP_EXCLUDE_CALENDAR#define _XTP_EXCLUDE_TASKPANEL#define _XTP_EXCLUDE_SHORTCUTBAR#define _XTP_EXCLUDE_SKINFRAMEWORK#define _XTP_EXCLUDE_RIBBON#define _XTP_EXCLUDE_SYNTAXEDIT另外值得注意的一点是,如果你选择static link,那么需要将XTP的资源导入你的工程之中。比如要使用中文资源,那么把下面的代码加入工程的rc2文件的最后#define _XTP_RESOURCE_LANGUAGE zh_CN#include 同时,你还需要修改一下XTP附带的XTToolkitPro.rc中的内容将最后的LANGUAGE_DEFAULT(TaskPanel)改成LANGUAGE_LOCALIZED(TaskPanel)然后在TaskPanelres目录下将Resource.rc复制成Resource_zh_CN.rc,并将其中的编码改成中文#if !defined(AFX_RESOURCE_DLL) | defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif /_WIN32#endif否则你之后include的资源会变成默认的英文认识XtremeToolkitPro的文件夹结构及文件用途XtremeToolkitPro安装后,其文件夹结构如下图所示: 前面的几个文件夹就不用我说了,重点说说Utils里面的文件夹。AppWizard:很显然是XtremeToolkitPro应用程序工程生成向导的文件夹,这一点后面再作详解。Package:此文件夹里有一个动态库文件CodejockPackage.dll和一个1033的文件夹,文件夹1033及其下的CodejockPackageUI.dll应该是与UI有关的E文资源包。而DLL文件是被注册在注册表中VisualStudio8.0Packages项下的,应该是用作本地化的,具体用途是为Visual Studio提供本地化资源,还是作别的什么用途就不是很清楚了,因为笔者对本地化不是很了解,望有这方面经验的达人指点指点,呵呵。Translations:文件夹是为ToolkitPro提供的多语言资源库。方便大家开发多语言版本的软件项目。另外Utils文件夹下还有两个.exe文件,CommandBarsDesigner.exe和ResourceEditor.exe,前者就不用我说了,是开发界面风格的工具,help中有它的使用说明手册。后者呢,是开发多语言版的资源编辑工具,不但可以用来编辑修改Translations文件夹下的资源动态库文件(.DLL),生成新的语种资源动态库,还可以提取.exe中的资源(String Table、Menu和Dialogs中的字符串)生成.xml文件,然后Export to DLL,生成新的资源动态库。然后是Workspace文件夹,在此之下的Resource文件夹是XtremeToolkitPro 支持的各国语言资源文件夹,其下又包括多个以ResourceXXX命名的文件夹,且每个文件夹下均包括Resource.rc、ResourceXXX_vc80.sln和ResourceXXX_vc80.vcproj三个文件(XXX代表语言名称)。打开.sln文件,整个解决方案里就只包括Resource.rc,由此可看出该工程仅仅是用来编译资源文件的。而Resource文件夹下有.mak文件(Resource.mak)、项目文件(Resource_vc80.sln)、资源包的定义文件ResourcePackage.h、ResourcePackage.rc。由此可看出是为批量编译资源文件用的。Samples文件夹下全是各个Sample的.sln文件。ToolkitPro文件夹下面是编译XtremeToolkitPro各种版本动态库用的项目文件。如果你修改了ToolkitPro的原文件(如果你是这种牛人:-),你可以打开ToolkitPro_vc80.sln再次编译ToolkitPro界面库便可生成Unicode版本的动态库,或非Unicode动态库。总结,由上述可以看到,XtremeToolkitPro不但为开发者提供了漂亮的界面库,而且为开发者开发多国语言的程序提供现成的界面相关语言资源库。顺便告诉大家,ToolkitPro还提供了类CXTPResourceManager,处理资源问题应该很方便哦,呵呵。使用方法在help里能找到。笔者之前通过ToolkitPro向导生成项目,结果界面部分却总是E文的,所以总感觉很不爽。至此,想要ToolkitPro显示中文,不再是难事了。哈哈!让你的应用程序界面-ToolkitPro显示中文打开ToolkitPro_vc80.sln项目,然后查看ToolkitPro.rc源代码,拉到文件最后,会发现如下的定义:1#if!defined(AFX_RESOURCE_DLL)|defined(AFX_TARG_ENU)23#ifdef_WIN3245LANGUAGE9,167#pragmacode_page(1252)89#endif/_WIN321011#includeXTToolkitPro.rc/non-MicrosoftVisualC+editedresources1213#includeafxres.rc/Standardcomponents1415#endif1617代码中定义包含的文件XTToolkitPro.rc 是在ToolkitPro的Source文件夹下的,XTToolkitPro.rc 文件集中定义的是界面库中各种控件的资源文件,咱们再打开XTToolkitPro.rc文件,我们发现文件开头几行定义说明了一切问题。12#defineLANGUAGE_DEFAULT(ProdName)34#ifdef_XTP_RESOURCE_LANGUAGE56#defineLANGUAGE_LOCALIZED_(ProdName,LangName)78#defineLANGUAGE_LOCALIZED_(ProdName,LangName)LANGUAGE_LOCALIZED_(ProdName,LangName)910#defineLANGUAGE_LOCALIZED(ProdName)LANGUAGE_LOCALIZED_(ProdName,_XTP_RESOURCE_LANGUAGE)1112#else1314#defineLANGUAGE_LOCALIZED(ProdName)LANGUAGE_DEFAULT(ProdName)1516#endif171819#if!defined(_XTP_EXCLUDE_CALENDAR)2021#includeLANGUAGE_LOCALIZED(Calendar)/_XTP_INCLUDE_CALENDAR2223#endif242526#if!defined(_XTP_EXCLUDE_COMMANDBARS)2728#includeLANGUAGE_LOCALIZED(CommandBars)/_XTP_INCLUDE_COMMANDBARS2930#endif31/.32333435第一行定义了缺省的语言,第二行的标识_XTP_RESOURCE_LANGUAGE可以看出该标识是为使用不同的语言资料文件而定义标识的。那么只要在程序库中定义了该标识就可以让ToolkitPro使用相应的语言资源库了。HoHo! 打开Source文件夹,在每一个控件包含的文件夹下都可以看到许多后缀为.rc的资源文件,由资源文件的名称,再由定义语句:#defineLANGUAGE_LOCALIZED_(ProdName,LangName)可以很容易猜得到中文的定义为zh_CN,自然可以猜到定义中文资源的语句即为:#define_XTP_RESOURCE_LANGUAGEzh_CN那么应该定义在哪。我的做法是定义在ToolkitPro.rc文件的头几行,因为该文件是编译界面库的项目文件中的文件,与ToolkitPro的源代码没有关系,因此尽可能不影响源代码为佳。接下来再找到下面一行:LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US改为LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED再次重新生成一下各种版本的动态库(编译你需要的版本就够了,全编译很费时的!:D),然后再运行你的应用程序,Bingo!界面元素的窗口、工具条等等,比如工具条自定义窗口都变成中文了。Ps: 我想说说ToolkitPro.rc文件中的#if!defined(AFX_RESOURCE_DLL)|defined(AFX_TARG_ENU)#endif标识AFX_RESOURCE_DLL我猜想应该是为制作多国语言资源所用。因为定义了它,其后的资源文件就不会被定义了。也就是不会把资源编译进ToolkitPro的DLL中。若哪位达人做过多语言版本方面的软件研究,还望不吝赐教。XTP界面在Dialog里的实现 1,确定你已经装好了XTP。2,修改目录:工具/选项/目录 include files : D:Microsoft Visual StudioXtreme ToolkitPro v11.2.2Source librarys files : D:Microsoft Visual StudioXtreme ToolkitPro v11.2.2Libvc603,工程/设置/C+ 在工程选项里面添加:/Zm200 注意大小写。4,在stdAfx.h里面添加:#include 5, 在Dialog.h文件中,Dialog定义的地方改为:#define CDialogSampleDlgBase CXTPDialogBaseclass CCardManageDlg : public CDialogSampleDlgBasepublic:。6,在Dialog构造函数实现的地方改为:CCardManageDlg:CCardManageDlg(CWnd* pParent /*=NULL*/): CDialogSampleDlgBase(CCardManageDlg:IDD, pParent)。7,dialog构造函数实现内,预先配置:XTPSkinManager()-SetApplyOptions(XTPSkinManager()-GetApplyOptions() | xtpSkinApplyMetrics);/这句必须有,XTPSkinManager()-LoadSkin(_T(Office2007.cjstyles);/这句是设置一种风格,Office2007.cjstyles是风格文件名,要拷贝过来。8,增加变量:BOOL m_bInRepositionControls, m_bInitDone;CRect m_rcBorders;用于第9,10步中,重新设置组件位置和大小。9,在initdialog里面添加:VERIFY(InitCommandBars();/XTP带,预处理,不可少。CXTPCommandBars* pCommandBars = GetCommandBars();/CXTPCommandBars管理TOOLBAR,Menu和status./*开始添加菜单*/pCommandBars-SetMenu(_T(Menu Bar), IDR_MENU1); CXTPToolBar* pToolBar = pCommandBars-Add(_T(Standard), xtpBarTop); pToolBar-LoadToolBar(IDR_MAINFRAME);XTPImageManager()-SetIcons(IDR_MAINFRAME);/图标pCommandBars-GetCommandBarsOptions()-ShowKeyboardCues(xtpKeyboardCuesShowWindowsDefault);/额外的。pCommandBars-GetToolTipContext()-SetStyle(xtpToolTipOffice);/额外的。/ pCommandBars-GetShortcutManager()-SetAccelerators(IDR_ACCELERATOR);/快捷键LoadCommandBars(_T(CommandBars);/XTP必须/*下面是为解决MENU和TOOLBAR引起的错位,通过迭代对所有子组件重拍*/CWnd* pwndChild = GetWindow(GW_CHILD);while (pwndChild) SetResize(pwndChild-GetDlgCtrlID(), SZ_TOP_LEFT, CXTResizePoint( 0, 0) );/0,0表示水平和竖直方向都不缩放。 pwndChild = pwndChild-GetNextWindow(); m_bInitDone = TRUE;RepositionControls();/重设组件位置和大小,实现见10.m_szMin = m_szWindow;AutoLoadPlacement(_T(Placement);10,实现RepositionControls();/重设组件位置和大小,无需看,直接复制。void CCardManageDlg:RepositionControls()if (m_bInRepositionControls | !m_bInitDone) return;CRect rcClientStart;CRect rcClientNow;GetClientRect(rcClientStart);if (GetStyle() & WS_MINIMIZE) | (rcClientStart.IsRectEmpty() return;m_bInRepositionControls = TRUE;RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);CRect rcBorders(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top, rcClientStart.right - rcClientNow.right, rcClientStart.bottom - rcClientNow.bottom);if (rcBorders != m_rcBorders) CPoint ptOffset(rcBorders.left - m_rcBorders.left, rcBorders.top - m_rcBorders.top); CSize szOffset(rcBorders.left + rcBorders.right - m_rcBorders.left - m_rcBorders.right, rcBorders.top + rcBorders.bottom - m_rcBorders.top - m_rcBorders.bottom); CRect rcWindow; GetWindowRect(rcWindow); rcWindow.BottomRight() += szOffset; Offset(ptOffset); m_szWindow += szOffset; m_szMin += szOffset; MoveWindow(rcWindow, TRUE);m_rcBorders = rcBorders;RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);m_bInRepositionControls = FALSE;11,添加状态栏的方法:状态栏变量:CXTPStatusBar m_wndStatusBar;在ONinitdialog里面加:if (!m_wndStatusBar.Create(this) | !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT) TRACE0(Failed to create status barn); return -1; / fail to createm_wndStatusBar.SetPaneInfo(0, ID_SEPARATOR, SBPS_STRETCH, 100);在合适的地方调用m_wndStatusBar.SetWindowText(lpsz);即可设置显示文本/*下面这句有时间看看*/LRESULT CDialogSampleDlg:OnKickIdle(WPARAM, LPARAM)if (GetCommandBars() GetCommandBars()-UpdateCommandBars();if (m_wndStatusBar.GetSafeHwnd() m_wndStatusBar.SendMessage(WM_IDLEUPDATECMDUI, TRUE);return 0;3 添加智能菜单1添加Id数组,看起来这一步对用户不太重要。static UINT uHideCmds =ID_FILE_PRINT, ID_FILE_PRINT_PREVIEW, ID_WINDOW_CASCADE;2在CMainFrame:OnCreate中添加智能菜单的初始化。/ Hide array of commandspCommandBars-HideCommands(uHideCmds, _countof(uHideCmds);/ Set Always Show Full Menus option to the FALSEXTP_COMMANDBARS_OPTIONS* pOptions = pCommandBars-GetCommandBarsOptions();pOptions-bAlwaysShowFullMenus = FALSE;3为CMainFrame的OnCreate函数添加LoadCommandBars(_T(“CommandBars”),这将恢复先前工具栏和菜单及一些所作的定制。int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)./ Load the previous state for toolbars and menus.LoadCommandBars(_T(CommandBars);return 0;4为CMainFrame添加OnClose消息的处理,添加SaveCommandBars(_T(“CommandBars”);在调用基类之前,这将存储先前用户使用过的命令。void CMainFrame:OnClose()/ Save the current state for toolbars and menus.SaveCommandBars(_T(CommandBars);CMDIFrameWnd:OnClose();4 自定义主题为应用程序添加一个定制的theme1创建一个从toolkit中预定义的theme中派生的新类。我们使用CXTPDefaultTheme,你可以使用以下任何一个theme类:- CXTPDefaultTheme 得到 Office 2000 theme- CXTPOfficeTheme得到Office XP theme- CXTPOffice2003Theme得到Office 2003 theme- CXTPNativeXPTheme得到Native XP themeclass CDoubleGripperTheme : public CXTPDefaultTheme;2重载CXTPDefaultTheme基类的DrawCommandBarGripper。这将允许添加我们自己定制的外观,画命令栏的把手(gripper)。class CDoubleGripperTheme : public CXTPDefaultThemevirtual CSize DrawCommandBarGripper(CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw);/ DrawCommandBarGripper function./ if bDraw if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论