3.3 控件集成实现 控件的基本用法和通信机制熟悉之后, 我们需要做的是把控件集成实现。由于游戏工 具开发既要考虑实用性,也要考虑规范性和美观性。游戏工具的开发侧重于内容的实现,对 于界面和界面上的控件集成, 不需要花费太多的时间和精力。 本书的控件集成实现采用业界 流行的界面库来讲解, 这样既能做出美观的界面。 由能减少很多的编码工作量提高制作游戏 工具的效率。 界面库一般都是由 C/C++这种中低级语言编码, 因为在 Windows 下的界面库实现技术大 都以直接操作控制 Windows 的消息和调用 Windows 的 API 为主。 这些基础的知识我们在以前 的章节中都讲解过。 所以如果大家有兴趣书写自己的界面库, 可以借鉴开源的界面库进行编 写。 无论何种界面库,最为根本的原理就是获得或者截获窗口的某些消息,按照自己的需 要处理这些消息,绘制出自己需要的界面。 按照 Windows 下的界面库的使用方法来分类,可以分为两种: 1、 通过派生、继承界面库中的类来使用库。这类界面库现在是占绝大多数。这类界面 库通常可以对同种类型的控件、 窗口自己控制显示风格。 这种类型的界面库典型的代表就是 GuiToolkit、ProfUIS。 2、 通过 Link 头文件,使用 DLL 来使用的界面库。这类界面库一般都是商业化的界面 库。这类界面库一般对于同种类型的控件、窗口都是显示统一的风格。这种类型的界面库的 典型代表是 Skin++、AppFace。 下面介绍几种常见的界面库 ClassXP(个人写的开源,不是很完善) sm/read.php?26 ProfUIS(部分开源,商用,效果不错) deproject/docking/prod_profuis.asp GuiToolkit(开源,类似 VS 风格) www.beyondata/default.htm GardenUI(免费,界面效果不错,用配置文件做分离处理使用方便) www.gardenui/ CJLib(开源,免费,是 xtreme toolkit 的前生,但 xtreme toolkit 收费了) ht
tp://dejock/ LibUIDK(部分免费,不开源,专业 MFC 界面库) www.iuishop/download.htm BCGControlBar(商用收费,界面不错) www.bcgsoft SKin++(收费,界面非常精美) www.uipower/ SkinMagic(收费,使用方便,界面效果不错)
appspeed/html/download.html SYGUI(收费, 功能齐全) www.sygui/ CJ60Lib(免费,6.09 版本以后商用(收费) mfc 扩展库很实用) dejockeys/kstowell/ 以上是常用的界面库的说明和链接, 大家可以根据自己的需求和爱好选择自己喜欢的界 面库。下面介绍几个功能强大的界面库的用法。 CJ60Lib 是原来的库(MFCXLib)已经更名后的名称,这是为了与那些使用旧库的程序 区别开来。本库与旧的库具有同样的功能。但是,针对 Visual C++ 6.0 作了几个扩展,这 个扩展库是几位高手共同完成的是开源免费的。6.09 版本是其最终的一个版本,其后的版 本将走入商业化了。这里介绍 CJ60Lib 这库的目的是为喜欢 Visual C++ 6.0 开发的程序员 提供一种界面制作的方法。虽然现在用的主要是 Microsoft Visual Studio 2003,2005,但 是 Visual C++ 6.0 的”粉丝”还是相当的多。 下面是关于 CJ60Lib 类的一些基本的介绍: CCJButton - (CJButton.cpp and CJButton.h ) MFC 中 CButton 类的改进。 这个类是为了处理在 CCJControlBar 类中的最小化和关闭 按钮。能处理扁平按钮。 CCJComboBox - ( CJComboBox.cpp and CJComboBox.h ) MFC 中 CComboBox 类的改进。 这个类是为了处理扁平外观的组合框, 就象在微软的 Office 系列产品中看到的一样。它很容易使用,只要将所有有 CComboBox 的地方替换为 CCJComboBox 即可。 CCJControlBar - ( CJControlBar.cp
p and CJControlBar.h ) MFC 中 CControlBar 类的改进。 这个类是基于 CristiPosea 写的 CSizingControlBar 类基础之上的。 添加了更多的外观给这个控件,包括最小和最大化按钮、把手、按钮浮动 提示、弹出菜单支持和垂直及水平 sizebar 指针。 CCJFrameWnd - ( CJFrameWnd.cpp and CJFrameWnd.h ) CCJMDIFrameWnd - ( CJMDIFrameWnd.cpp and CJMDIFrameWnd.h ) CCJDockBar - ( CJDockBar.cpp and CJDockBar.h ) 这些类重载了缺省的主框架布局,以增加 3D 效果到工具条。为了使用这些类,仅将 CFrameWnd 改为 CCJFrameWnd,其中,CMainFrame 包含在 Mainfrm.h 文件中, (对于 MDI, 采用 CCJMDIFrameWnd) 。 CCJOutlookBar - ( CJOutlookBar.cpp and CJOutlookBar.h ) 新增类,用于实现 Outlook 中的工具条。 CCJPagerCtrl - ( CJPagerCtrl.cpp and CJPagerCtrl.h ) 新增类,用于设置标签视或者对话框。 CCJTabCtrlBar - ( CJTabCtrlBar.cpp and CJTabCtrlBar.h ) 新增类。 CCJToolBar - ( CJToolBar.cpp and CJToolBar.h ) MFC 中 CToolBar 类的改进。 CCoolMenuManager -( CoolMenu.cpp, Emboss.cpp and CoolMenu.h ) CSubclassWnd -( Subclass.cpp and Subclass.h )
新增类,用于改进已有的菜单。 CFlatToolBar - ( FlatBar.cpp and FlatBar.h ) Obsolete with VC 6.0 CModuleVersion - ( ModulVer.cpp and ModulVer.h ) 这是 CCJToolBar 的基类。 CCoolBar, CRebarInfo - ( CoolBar.cpp and CoolBar.h ) Obsolete with VC 6.0 新增类,用于实现 Internet Explorer 4 风格的工具条。 CHyperLink - ( HyperLink.cpp and HyperLink.h ) 超链接控件。
图 3-22 CJ60Lib 类继承图
visual studio和vs code的区别CJ60Lib 类库的使用方法和 IDE 环境的设置 在【Project Settings】中选择【General】标签, 【Microsoft Foundation Class】设 置为 Use MFC in a shared DLL。 在【Project Settings】中选择【Link】标签,设置【Category】为 Input,增加../Lib 到 Additional Library Path。 在【Link】标签中,改变 Category 为 General,Output Name (所有配置)设置为../Lib。 选择【C/C++】标签,改变 Category 为 Preprocessor,增加../Include 到 Additional Include Directories. 最后一步是添加下面两行代码到 StdAfx.h 头文件中: #define MFCX_PROJ #include <CJ60Lib.h> 为了能静态链接到 CJ60Lib,需要做下面修改: 在 【project settings】 对话框中, 选择 【General】 标签, 确保 【Microsoft Foundation Class】设置为 Use MFC in a static library。 添加下面代码到 StdAfx.h 头文件,其将使库静态链接到应用程序: #define MFCXLIB_STATIC #define MFCX_PROJ #include <CJ60Lib.h>
图 3-23 界面效果
GuiLib1.6 是另一套 Windows 界面库,它是国外人写的一个免费的基于 MFC 界面库。功 能非常强大,可以制作出类似 PowerPoint, Outlook, Visual Studio 2005 等各种界面。既 美观又实用。GuiLib1.6 的版本可以针对 Visual Studio 2005 进行界面开发。由于 GuiLib 是基于 MFC 的扩展库,
所以在普遍采用 MFC 做游戏开发工具的游戏业界来说, 使用它既方便 又实用。 要使用前首先下载 GuiLib1.6。由于 GuiLib1.6 是免费开源的。所以我们可以下载到它 的源代码。进行编译以便生成我们需要的 lib 和 dll 库文件。 编译之前需要注意要把 GuiADODB.h 头文件中的如下语句
#import "C:\\Program Files\Fichiers communs\System\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
改为:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
这样编译链接才不会出现问题。 如果想利用 GuiLib1.6 进行自己的界面开发需要加入 GuiLib1.6 的 include 和 Lib 这样 保证将来再程序的编译和运行时候不会出现错误。运行时候需要提供 GuiTk115ud.dll, GuiTk115u.dll,GuiTk115d.dll,GuiTk115.dll 这四个动态链接库保证程序能在 Debug 或 Release 模式都能运行。具体操作如下图所示:
图 3-24 包含目录的添加
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论