UI框架系统剖析系列4(系统适配层)
(源代码下载地址http://t.cn/zW0J6lj)该框架在设计之初的目标之一是做到可移植,由此带来两个问题:第一,如何在不修改代码的前提下,在不同的平台上运行基于该框架的应用程序。第二,如何让程序能在尽量多的平台上运行。要做到第一点,一般常用的方法是抽象一些通用接口,然后针对不同的平台分别实现,框架和应用程序不依赖具体平台代码,而只依赖这些通用接口,也就是常说的依赖倒置。要做到第二点,一般需要用C语言编写代码,因为目前为止还有很大一部分平台不支持C++(尤其是嵌入式平台),而C语言又难以表达面向对象思想,所以大家看到源码工程中有两个带"_C"后缀的工程(MobileDemo_C和Win32Adapter_C),这两个工程分别是将C++转换成C后的工程,方便做到更多平台的适配。在这里我们不详细介绍如何将C++代码转换成C(以后有机会再向大家介绍),而是着重介绍如何做到系统适配。
打开Win32Adapter工程,和系统适配相关的文件主要包括以下几个:EMyUi、EScreen、EWndGc、Win32File、Win32Thread、Win32Os等,下面分别介绍。
1.EScreen是对屏幕的抽象,比如我们的手机有显示屏,PC也有显示屏。由于是在PC中运行,这里EScreen可以看做是对硬件屏幕的一种抽象。
OnKeyDown函数截获了系统按键消息,然后通过m_pMyUi->OnKey(AWS_Key, code);将其传递给框架系统处理。OnPaint函数截获了系统绘制消息,通过m_pMyUi->OnDraw(ert);函数传递给框架系统处理。Key函数可以用于产生虚拟的按键消息。
2.EMyUi是对UI的一种抽象,其父类是CAwsUi,包括了消息路由和其他