To be, or not to be - that is the question.

PowerBuilder编程新思维6:装饰(用最简单的方式做框架)

问题

这一章,是写得最艰难的一章,原因有四:

一、WUI的范畴实在太大了

第二部分Outside原计划写两部分内容Dui和Wui,但是发现如果写下去,这一章的内容太多,需要的工作量也大大超出预期。

所以把Wui改为第四部分,不再放在本章中讲述。

二、Duilib开源库本身的问题

最开始是发现,Duilib不支持class表达,作皮肤框架使用很别扭,但如果要换库,也没有非常好的选择。

DuiLib_Ultimate还在维护但内容少,REDM和DuiVision不再维护,NIM_Duilib就只更新了一个版本,Soui的许可证太过奇葩。

三、Dui部分不能跨平台

如果Dui仅仅是作为PB皮肤使用当然没问题,但是随着开发的深入,跨平台成了很迫切的预期,深入还是放弃一直是在徘徊中。

四、PB代码会编译成别的语言

如果编译成别的语言,界面库就没有太大的意义了,即使要移植,也肯定是选择新语言的界面库,而非Duilib。

基于以上四个问题,选择duilib库,开发界面框架,就成了一个非常困难的决定

其实这两年,我都在更新PB的博客,但是没有发表,因为我一直在调整框架的内核。

希望以后能有一个合适的选择项,但是现在暂时放弃这一章的技术开发。以下内容仅供参考。

前言

在前两节,我们已经分析了很多界面技术,但最被大家关注的界面技术一定是框架。

然而,框架也是侵入性最高的,更换框架的代价过高,所以我的目标一直是做一款更换成本最低的框架。

什么是框架,其实就是软件的主界面。以经典的Kodigo框架为例,除了红框内的内容,其它的都是框架。

软件的主界面是软件的核心界面,主界面的形象,直接决定了用户对软件的印象。

所以,不管什么技术,有框架的技术才是好技术。下面我们就来分析一下如何做个好框架。

框架

其实要实现一个界面框架的思路很简单:

就是把原生控件都放在dui控件之下,在dui控件上重新绘制就行了。

不管界面有多复杂,除了DataWindow所有控件全部都在dui控件上自绘。

这样不仅能控制主题和风格,而且可以新增很多效果,至于DW也可以通过其它手段实现主题切换。

大多数的PB界面,无非是一个主界面框架,菜单、工具条、状态栏 、还有窗口TAB。

框架用DUI控件显示,红框内的窗口区域用一个普通TEXT控件覆盖,然后把所有子窗口的父窗口都修改为TEXT控件。

这样看起来很正常的界面,实际上由两都完全不同的控件组成。两种不同类型的窗口一起工作,谁也无法分辨,和谐统一。

实现

其实整个框架不太复杂,只要把一些细节做到位,界面是没有破绽的。

比如标题栏的消息处理,比如OnSize的事件处理。

可惜当初选择了Duilib,换库需要重写,自己却没有那时候的激情和动力了。

有空再来填坑吧。

(第二部分 《Outside 哭泣的小丑》完)

PowerBuilder编程新思维6:装饰(用最简单的方式做框架)的更多相关文章

  1. PowerBuilder编程新思维5:包装(界面美化与WebUI+React)

    PowerBuilder编程新思维5:包装(界面美化与WebUI+React) 前一节,分析了三种界面美化方案,都是控件级的美化.今天再来分析一下窗口级的美化.上一次讲的DirectUI,大家反响一般 ...

  2. PowerBuilder编程新思维4:钩挂(界面美化与DirectUI)

    <第二部分 Outside> PowerBuilder编程新思维4:钩挂(界面美化与DirectUI) PB的界面由于其封闭性,一直以来都是最大的弱项.自PB9.0开放了PBNI接口后,开 ...

  3. PowerBuilder编程新思维3:适配(三层架构与GraphQL)

    PowerBuilder编程新思维3:适配(三层架构与GraphQL) PB在富客户端时代,是一线开发工具.随着网络发展,主流架构演进到三层架构的时代,PB拿不出有力的三层架构,已经明显力不从心,市场 ...

  4. PowerBuilder编程新思维2:嵌入(Thread多线程)

    PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...

  5. PowerBuilder编程新思维1:扩展(Lua)

    前言 PowerBuilder作为开发工具退出一线行列已经很久了,在2019年来谈这样一款老旧的编程工具是否有意义?诚然,PB有着太多硬伤,但还是有它的用武之地的.而且今天讲的这个“新思维”大部分内容 ...

  6. C++编程新思维中的技巧

    1.编译器断言 技巧大致跟后面的一样,都是利用偏特化,但是在C++ 0X里面已经有static_assert,所以感觉这东西也没什么用处了,更多的只是开阔眼界 2.偏特化 就是专门对一个类型去进行特殊 ...

  7. [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

    阅读<Java并发编程实践>一书后整理的思维导图.

  8. 【响应式编程的思维艺术】 (2)响应式Vs面向对象

    目录 一. 划重点 二. 面向对象编程实例 2.1 动画的基本编程范式 2.2 参考代码 2.3 小结 三. 响应式编程实现 四. 差异对比 4.1 编程理念差异 4.2 编程体验差异 4.3 数学思 ...

  9. 《C++设计新思维》Command设计模式读后感

    原文内容提领: 本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话! 如何利用C++老标准实现C++11新标准类似std::function提供的功能. std::function简 ...

  10. 《C++设计新思维》勘误,附C++14新解法

    勘误: 原书(中文版)3.13节,65-69页中GenScatterHierarchy以及FieldHelper均存在问题,当TypeList中类型有重复时,无法通过编译(原因在于“二义性基类”). ...

随机推荐

  1. C语言:学生成绩排名----冒泡排序

    题目: /*     输入10个学生成绩.     计算总分以及平均分数.     求出高于等于平均分的人数.     再按降序(由大到小)排序成绩并输出      */ 用到的冒泡算法代码模板: / ...

  2. 二分法(POJ-1064与POJ-2456)

    二分查找,简而言之就是在一个有序的序列中找一个元素,因为这些元素已经有序,所以每次都将要找的数跟待寻找序列的中间元素比较,如果要找的数大于中间元素,说明接下来只需要在该序列的右半边中找,所以可以不用管 ...

  3. 超全、超简单Vue微信公众号授权登录指南

    <template> <div id="app"> <h1>微信授权登陆</h1> <div> <div> ...

  4. MySQL知识网络

    MySQL知识网络 引擎 InnoDB 支持表锁 .行锁 支持事务 *.frm 表结构文件 *.idb 表数据和索引文件 MyISAM 支持表锁 *.frm 表结构文件 *.MYD 表数据文件 *.M ...

  5. Android 13 - Media框架(13)- OpenMax(一)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解Android OpenMax框架,该框架了解完成之后,我们会再回过头去了解 ACodec,将 MediaCodec - ACode ...

  6. Xcode 最近使用的一些问题

    1.上架的App如何测试推送? 苹果的证书分为开发证书和发布证书,上架AppStore的App应该使用发布证书进行配置,但是发布证书编译出包的App无法安装到手机上 只有一种方式,采用Ad hoc p ...

  7. uniapp 富文本图片100%显示

    下面的这个方法是在百度上找的,但是老是报错,一直没找到原因,索性自己就挨个检查了下,发现在过滤之前需要对传过来的值进行检测,是字符串才能让这个方法执行 filters: { formatRichTex ...

  8. openstack考试需要的部署操作

    openstack操作大全 一,keystone 用户 1.创建用户 openstack user create --password 密码 --email邮箱 --domain 域名 用户名字 2. ...

  9. python实现取得成员所在的多个位置

    注:本代码主要是为了实现多个集合之间求并集时的辅助代码,简单的举个例子来说明代码的功能. 约定:例如{11: [2, 3]}表示数据11在集合2和集合3中都存在. 现有以下数据: d0 = {38:  ...

  10. 设计模式:命令模式(Command Pattern)及实例

     好家伙,   0.什么是命令模式 在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合". 但在某些场合,比如要对行为进行&q ...