SOUI官方论坛

 找回密码
 立即注册
查看: 175|回复: 0

SOUI3升级4.0注意事项

[复制链接]
  • TA的每日心情
    奋斗
    2022-7-4 09:45
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    59

    主题

    588

    帖子

    5481

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5481

    突出贡献优秀版主

    发表于 2022-4-18 09:55:20 | 显示全部楼层 |阅读模式
    4.0相对于3.x最大的区别就是4.0的核心模块全部使用类COM接口导出。
    为了实现这个目标,原来的SOUI的一些重要的设计到了4.0需要做重新设计。

    ### 3.0升级4.0注意事项
    1.  原SOUI_CLASS_NAME替换为DEF_SOBJECT, 且第一个参数是它的基类
    2.  事件定义使用DEF_EVENT/DEF_EVENT_EXT这两个宏来定义,使用使用方法参见系统事件
    3.  内置的ResProvider使用SouiFactory来创建,不再提供全局函数创建。
    4.  resbuilder重写,定R,UIRES的方法有点变化。参考demo
    5.  SEventArgs替换为IEvtArgs
    6. 原代码中直接使用pugi_xml,4.0中统一使用SOUI包装后的SXmlDoc, SXmlNode, SXmlAttribute。对应的接口为IXmlDoc, IXmlNode, IXmlAttribute。
    7. 原代码中使用的IPen, IBrush, IBitmap, IRegion, IPath等IRenderObj对象统一增加S后缀,变为IPenS, IBrushS, IBitmapS, IRegionS, IPathS等,主要是C接口中不支持命名空间,导致可能和系统接口重名。(最新修改在C++版本中增加了兼容定义)
    8. 为了兼容C接口,所有接口的方法都没有了默认参数。比如IRenderTarget.SelectObject,3.0第二个参数默认为NULL, 新版本没有默认参数,必须写全参数。(最新修改已经可以兼容默认参数)
    9. XxxView的适配器接口有调整,所有方法都统一使用WINAPI调用,原SWindow*的参数替换为SItemPanel*, 原pugi::xml_node替换为SXmlNode。
    10. SHostWnd不直接继承自SWindow,而是只继承SNativeWnd, 需要使用GetRoot()来获取顶层SWindow*
    11. SXmlDoc对象和pugi::xml_document一个区别在于SXmlDoc不继承SXmlNode, 要获取root节点,可以使用SXmlDoc.root()方法。


    前面几点,通常不修改对,编译就会失败,最后一点可能比较容易忽略。
    在pugixml只,xml_document也是一个xml_node,但是SXmlDoc并不是SXmlNode,要获取原来的xml_document所代表的节点,必须使用SXmlDoc.root()方法来获取。
    此外,在定义新的事件的时候,如果事件只不需要扩展事件字段,则应该加入一个任意的简单数据类型字段,防止C接口版本编译失败,例如:
    [C++] 纯文本查看 复制代码
    DEF_EVT(EventInit, EVT_INIT, on_init, { int fake; });
    

    此处的int fake;即为一个不需要的事件字段。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-4-27 11:11

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表