duilib 入门一之界面库基本原理

来源:互联网 发布:php怎么调用接口 编辑:程序博客网 时间:2024/05/21 00:47

    关于UI控件的控制事件和响应,无论在PC还是在手机或者其他设备,处理方式基本是一样的。

如何理解呢?你可以试着想一下,假如有这个一个需求,

1、你只能得到显示器的分辨率,比如1024*1280,以及鼠标点击坐标,以及移动的坐标;

2、设备只提供几个画图的函数,你可以画几个框框,并进行背景设置等等;

3、你需要在这个设备上面开发一个窗口,窗口上面有一个按钮;

4、程序运行后,设备会提供一个函数,调用这个函数,你会得到当前窗口在屏幕中的位置,假设为函数名为 GetCurProcecssWindowPos();

5、点击下这个按钮,设备会做点什么,这由其他人完成;

然后到此结束


    当你接到这个案子,你会怎么做?试着思考一下。

    如果你见过windows窗体,你可能会按照下面的步骤进行

1、程序运行后,先使用画图函数画一个窗体,窗体上面有标题栏,关闭按钮,以及需求中的提到的按钮,并记下窗体上面各个按钮的相对位置

2、记下窗体中各个按钮的相对位置(这是因为主窗口的位置随时变,记下绝对位置没用)

3、主窗体固定后,调用GetCurProcecssWindowPos函数获得窗体在屏幕中的位置

4、定时去获取鼠标的点击位置

5、获取鼠标位置了,通过计算,并对比是否鼠标点击的位置是否在我们需要的按钮上面,如果是,则调用鼠标响应的函数。


抛开操作系统,我们是不是可以按照上面的方式设计一个窗体程序?答案是肯定的。


    回到windows上面,windows操作系统提供的大量的函数和系统事件,我们可以按照上面的逻辑设计一套窗体系统,为了达到更好的结构,我们或许会想着把逻辑和界面的部分分离开来。

首先,我们需要一个文件来描述控件的布局,控件使用的图片,控件的特征,控件的标示等等,假定该文件为UI.xml,描述如下面所示,

<HorizontalLayout width="97" align="left">

<Button name="checkRemKey" width="17" height="17" normalimage="image\CheckBoxNormal.png" hotimage="image\CheckBoxHot.png" pushedimage="image\CheckHot.png" /> 

</HorizontalLayout>


然后我们会去设计一个线程,专门用来解析UI.xml,并进行相应的绘制,我们还可能设计一个线程专门用来监控windows的各种事件(设备的输入输出,系统消息),该线程实现可能会是这样

switch(GetMsg())

case WM_LBUTTONDOWN:

XXX;

break;

case WM_TIMER:

XXX;


于是,一个逻辑和界面分开的程序就被设计出来了,

以上就是各种界面库的原理


转自:http://blog.csdn.net/lishi969635/article/details/49969913

原创粉丝点击