2006-03-20炸弹人开发日志

经过昨晚的反复思考,觉得不用stlport对不起自已,毕竟花了时间。而且以后也可能碰到同样的问题。于是早起就把clanLib用新的stl重新编绎了一次,出现了昨天的错误:

E:/Program Files/STLport/stlport/stl/_num_put.c(168) : error C2059: syntax error : ')'

        E:/Program Files/STLport/stlport/stl/_num_put.c(450) : see reference to function template instantiation 'class _STL::ostreambuf_iterator<char,class _STL::char_traits<char> > __cdecl _STL::__copy_integer_and_fill(const char *,int,class _STL::

 

解决方法是:不使用SGIIOSTREAM,即在stl_user_config.h中打开

 # define   _STLP_NO_OWN_IOSTREAMS    1               开关。

 

现在就可以编译通过了。

 

 

最后总结一下安装clanLib的过程,免得以后又要重来过:

1.       安装dx8sdk

2.       安装Microsoft Platform SDK

3.       下载编译stlport,我这里用的是STLport- 4.6.2 (当然,你不用stlport也是可以的)

4.       stlport中的头文stl_user_config.h设置

    # define   _STLP_NO_OWN_IOSTREAMS      1

# define   _STLP_NEW_PLATFORM_SDK 1

# define   _STLP_USE_MFC 1      //要用MFC就选上吧,不过我也没怎么用MFC

5. VC6.0中把Platform SDKincludelibsdk目录设为最顶层

6.安装ExternalLibs,其中包含了一些clanLib用到的开源库,比如zlib, libpng。这些很多都是在LINUX下开发的,原来clanLib官方网站都统一把他们打包成win32的二进制开发包。现在似乎没得下载了。

7. 编译clanLib(我这里用的是clanLib 8.0.rc2 )其中会在clanLibCL_GUI模块中碰到一个C2857 error, 解决方法就是在工程中的precompiled header选为not using precompiled headers,并且把precomp.cpp从工程文件中去除就可以了。

 

8 clanLib的例子中的大多工程都有  __STL_DEBUG 宏定义,把它去除。否则程序虽然能编译通过,却运行不了。因为stlport默认是没有设置调试的,clanLib库的编译我想大家都应该是用默认的把。

 

 

 

 

对于使用clanLibGUI模块来做的介面程序。会用到下面好几个类,并且他们的关系还挺复杂的:

首先,clanLib各大部分内置的xml资源数据可以在官方的帮助文档中找到

http://www.clanlib.org/docs/Overview/gui_resources.html

另外CL_Sprite的则可从API的帮助中找到

 

 

CL_Resource           //资源数据,相当于xml中的数据单位

CL_ResourceManager    //资源管理,相当于一个xml文件

CL_GUIManager        //主介面,一个根组件

CL_ComponentManager  //通过xml生成的gui对象,可以由它来管理

CL_StyleManager       //GUI介面样式,有两个功能:一个是管理xml中定义的gui样式,另一个则是关连组件与外观(样式)的中介.

CL_Component         //组件,真正产生事件的地方。

CL_ComponentStyle     //组件外观,一般来说是通过外观与组件关连产生新的外观。而不是使用继承,这点同VC中的组件是不一样的。

 

(上面的样式与外观是同一个词)

 

 

CL_ResourceData     //资源数据

CL_Button           //组件,继承自CL_Component

 

 

它们之间的关系分两种:

资源数据:

CL_Resource     只是直接映射xml中的数据,从这里读出的数据都是字符串

CL_ResourceData 给出可以生成相应对象的结构体数据。比如CL_Surface

CL_ResourceManager 保存了xml文件中的所有数据,如果数据是clanLib中本身都定义好的,而可以直接从CL_ResourceManager产生相应对相。

 

GUI数据:

GUI的资源定义是建立在CL_ResourceManager资源数据的读取上。当然,如果全是用它码写的话就不需要了。

 

CL_GUIManagerCL_ComponentStyleCL_ComponentCL_StyleManager

CL_ComponentManager 之前的关系。

 

首先clanLib中的GUI是由组件(CL_Component)构成的,但是同我们用的VC有点不一样的

地方是,它不能单独的工作。他的显视需要一个CL_ComponentStyle,而CL_ComponentStyle

会关连CL_Component相关的事件,以进行重绘等操作。而且每个CL_Component的构造函

数中会把自已组件的类型传递给CL_StyleManager。由CL_StyleManager再把他们两个进行

关连。这样,如果你想构造新组件。标准的方法,就至少要重写CL_StyleManager,以及

CL_ComponentStyle

 

带有Manager的资源数据都需要CL_ResourceManager支持。其实原始数据在CL_ResourceManager中都有了,不过要转换为特定功能的数据。就要加上如CL_ComponentManager与及CL_ComponentStyle这样的壳。

 

总结:今天目标定得不明确,并且昨天残留的装机问题也没有完全解决 , 所以进度还是不满意。今天除了把开发环境完全搞定之外,就把今天看明白的部分记下来吧。整个介面程序按计划应该在 23 号完成。毕竟早点睡才有精神哪。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值