嵌入式操作系统原理 —— windows ce
DESCRIPTION
嵌入式操作系统原理 —— Windows CE. 第七章 用户界面与图形子系统. 内容提要. GWES 概述 设计 Windows 用户界面 定制用户界面. 1 GWES 概述. GWES G raphics W indowing E vent Manager S ubsystem Win32 应用编程接口 (API), 用户界面 (UI), 和 图形设备接口 (GDI) 库的组合 是用户、应用程序和操作系统之间的接口 GWES 集成 GDI, 窗口管理器和事件管理器。 GWES 模块是 Windows CE 中最高度组件化的部分,包括两个子群 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/1.jpg)
嵌入式操作系统原理——Windows CE
第七章 用户界面与图形子系统
![Page 2: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/2.jpg)
内容提要• GWES 概述• 设计 Windows 用户界面• 定制用户界面
![Page 3: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/3.jpg)
1 GWES 概述• GWES
– Graphics– Windowing– Event Manager– Subsystem– Win32 应用编程接口 (API), 用户界面 (UI), 和图形设备接口 (G
DI) 库的组合 – 是用户、应用程序和操作系统之间的接口
• GWES 集成 GDI, 窗口管理器和事件管理器。• GWES 模块是 Windows CE 中最高度组件化的部分,包括
两个子群– USER—— 处理消息、事件、用户输入– GDI—— 负责图形输出
![Page 4: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/4.jpg)
GWES 组件模型
• 最小配置用于创建最基本的 Windows CE 版本,包括操作系统内核 (Core.d11) 和选定的 GWES支持组件,如– 消息处理– 用户输入– 电源管理而不显示 UI ,
也不包括窗口管理功能
• 中等配置包括操作系统核心并支持以下 GWES 功能– 消息处理及用户输入– 电源管理– 提示性发光二极管 (LED)– GDI ,包括 Microsoft TrueType 字体和光栅
字体,文本绘制,调色板和打印– 可定制的触摸和校准 UI– 网络 UI 对话– 波形 API 管理器– 输入方法管理器 (IMM)– 窗口和对话管理– 可定制 UI
• 完全配置包含所有的 GWES 组件
![Page 5: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/5.jpg)
Windows CE 图形子系统的结构
消息框
对话框管理器
OOM Splash 类
窗口管理器 事件管理器
编辑框
列表框
组合框
按
钮
菜
单……
控件
![Page 6: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/6.jpg)
1.1 USER 系统• 三个核心组件
– 消息队列– 事件管理器– 用户输入系统
![Page 7: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/7.jpg)
USER 部分的主要结构应用程序
应用程序
驱动程序 键盘驱动程序 触摸设备驱动程序 显示驱动程序
用户输入系统前台窗口活动窗口焦点窗口
光 标
剪贴板
Wmbase 窗口管理器
Winmgr
GDI
消息循环系统SendMessage()PostMessage()
GWE Msgque
![Page 8: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/8.jpg)
消息处理• 消息
– 消息标识符(识别消息的命名常数)• 创建一个窗口时发送 WM_CREATE• 删除一个窗口时发送 WM_DESTROY• 窗口客户区改变需要重绘时发送 WM_PAINT
– 可选参数• 意义和取值取决于消息标识符• 可为整数、组合位标志、结构指针或其它信息
![Page 9: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/9.jpg)
消息队列的功能• 接收消息并将消息发送到相应的窗口• 保存输入状态信息,比如光标的大小、提
示符闪烁率等
![Page 10: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/10.jpg)
消息传送的两个基本函数• SendMessage()
– 同步消息传送机制– 消息队列和线程一一对应
• PostMessage()– 异步消息传送机制– 每个窗口都和一个与特定线程相关的消息队列联系在
一起– 窗口是消息传送的目的地
![Page 11: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/11.jpg)
其它消息处理函数GetMessage 从消息队列中得到消息
DispatchMessage将 GetMessage 找回的消息分发给一个窗口程序
TranslateMessage 将一个键盘消息转换为字符消息
TranslateAccelerator 处理菜单命令对应的加速键
IsDialogMessage确定一个消息是否为一个对话框所需要,如果是则处理这个消息
PeekMessage检索一个消息,并存放这个检索信息到结构
RegisgerWindowsMessage定义一个新的窗口消息,它保证将在整个系统中均可使用
![Page 12: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/12.jpg)
SendMessage 的同线程消息处理流程
WndProc( )...
接收消息队列
发送消息堆栈
绘图请求
消息列表
其他
发送消息队列
.
.
.SendMessage(hWnd…);
![Page 13: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/13.jpg)
SendMessage 的异线程消息处理流程
WndProc( )...
接收消息队列
发送消息堆栈
绘图请求
消息列表
其他
发送消息队列
.
.
.SendMessage(hWnd…);
接收消息队列
发送消息堆栈
绘图请求
消息列表
其他
发送消息队列
GetMsg(&msg)
![Page 14: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/14.jpg)
PostMessage 的消息处理流程
接收消息队列
发送消息堆栈
绘图请求
消息列表
其他
发送消息队列
WndProc( )...
GetMessage(&msg) DispatchMessage(&msg).
.PostMessage(hWnd…);..
![Page 15: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/15.jpg)
输入管理• 输入管理由一套子系统完成,负责处理以下几
个相互关联的窗口
活动窗口 每个线程有一个特定的窗口称为活动窗口
焦点窗口活动窗口和其子窗口可以是焦点窗口焦点窗口能够接收来自键盘的消息
前台窗口 系统中一个特定的线程或者消息队列称为前台线程,前台线程中的活动窗口是前台窗口
![Page 16: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/16.jpg)
SetActiveWindow(…)SetFocus(…)SetForegroundWindow(…)
焦点窗口
活动窗口
三个窗口的关系图
![Page 17: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/17.jpg)
发送消息队列...
接收输入事件的合适窗口
输入消息队列
键盘输入消息 触摸设备输入消息
窗口管理器PostMessage()
PostMessage()触摸设备驱动程序
键盘驱动程序
GWE 输入线程
触摸输入事件和键盘输入事件的处理
![Page 18: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/18.jpg)
Windows CE 支持的用户输入的类型
• 键盘• 鼠标• 触摸屏和输入笔• 输入面板• 手写体识别
![Page 19: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/19.jpg)
键盘输入模型键盘
扫描码
键盘设备驱动程序
消息
系统消息队列
消息
线程消息队列
消息
线程消息循环
消息
窗口过程
系统消息队列
虚键码 转换消息 字符
![Page 20: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/20.jpg)
处理键盘消息• 窗口以击键消息和字符消息的形式接收键
盘输入• 非系统击键
– WM_KEYDOWN– WM_KEYUP
• 系统击键– WM_SYSKEYDOWN– WM_SYSKEYIP
![Page 21: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/21.jpg)
WM_KEYDOWN 消息• 收到此消息时,应该检查消息中包含的虚键码,以确定如何处理击键,虚键码包含在消息的 wParam 参数中。另外通常程序只处理非字符键产生的击键。典型代码框架:
case WM_KEYDOWN:
switch(wParam)
{
Case VK_HOME:……Break;
Case VK_END:……Break;
……
Default:……Break;
}
![Page 22: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/22.jpg)
字符消息• 用户输入字符时, Windows CE 并不自动产生字
符消息,而是产生击键消息。• 应用程序消息循环应调用 TranslateMessage 函
数将击键消息转换为相应的字符消息• Windows CE 的四条字符消息
– WM_CHAR– WM_SYSCHAR– WM_DEADCHAR– WM_SYSDEADCHAR
![Page 23: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/23.jpg)
接收来自输入笔的输入• 通过输入笔在触摸屏上的点击可完成类似鼠标的
操作。• Windows CE 支持的输入笔的消息
– WM_LBUTTONDBLCLK — 用户双击屏幕– WM_LBUTTONDOWN — 用户单击屏幕– WM_LBUTTONUP — 用户从屏幕上抬起输入笔– WM_MOUSEMOVE — 用户在笔尖接触屏幕时移动输
入笔
![Page 24: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/24.jpg)
接收来自输入面板的输入• 没有键盘输入的 Windows CE 设备需要模拟键盘
输入的输入方法 (IM) , Windows CE实现了一个通过触摸屏操作的输入面板结构
• Windows CE lM 需要两个部分:– 软件输入面板子系统– IM
• 输入面板子系统完成非键盘输入到键盘事件的转换,也负责管理软件输入方法
![Page 25: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/25.jpg)
输入面板通信示意图
• 输入面板调用 IInputMethod借口创建 IM ,然后就可以接收用户输入
• IM通过 IIMCallback接口将数据传输给输入面板
应用程序
键盘驱动分发系统
GWES
键盘事件
输入面板
IIMCallback
IM
IInPutMethod
![Page 26: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/26.jpg)
手写识别• Windows CE.NET手写体识别引擎目前能够识别– ASCII 字符集的所有 94 个字符–各种图形字符,如中文、日文、韩文,并产生
相应的 Unicode 输出
![Page 27: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/27.jpg)
HWXGUIDE 结构• 定义用于字符输入的识别框的
大小和位置• 基线 (cyBase) 和中线 (cyMid)主要用于识别字符,对于识别图形字符不需要
• 使用多个识别框时,偏移参数在各个识别框之间形成了一定的缓冲区,以防止一个识别框内的字符覆盖另一个识别框的字符
xOrigin yOrigin
cxOffset
cyOffset cxWriting
cyWriting
cyBase
cyMid
cyBox
cxBox
![Page 28: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/28.jpg)
手写体识别过程1. 调用 HwxConfig 函数:为应用程序初始化识别引擎2. 调用 HwxCreate 函数:创建 HRC (手写识别上下文)对象3. 调用 HwxSetGuide 函数:定义处理用户输入的识别框4. 调用 HwxALCValid 和 HwxALCPriority 函数:定义识别准则5. 调用 HwxSetContext 函数:向 HRC 对象传递早先识别的字符6.当用户书写时,调用 HwxInput 函数:向 HRC 对象传送手写数据
7. 调用 HwxProcess 函数:向识别引擎传递 HRC 对象注:如果使用不完全识别(用于识别汉语等复杂的多
笔划语言字符),则对于每个输入笔划重复步骤 78. 调用 HwxResultsAvailable 函数:获得已经识别的字符数9. 调用 HwxGetResults 函数:获得识别引擎结果10. 调用 HwxDestroy 函数:删除当前的 HRC 对象,表示识别过
程的完成
![Page 29: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/29.jpg)
• 用于控制文本和图形的显示• 使用GDI 画直线 ,曲线 ,闭合图形、文本、位图等
• GDI使用设备上描述表 (DC)存储特定设备的绘图的属性,包括画笔、画刷、字体、位图、调色板等
• Windows CE 支持打印机设备描述表、显示设备描述表和内存设备描述表
1.2 GDI ( Graphics Device Interface )
![Page 30: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/30.jpg)
Windows CE 支持的 GDI 功能• 光栅字体和 TrueType 字体• 定制彩色调色板以及调色和非调色的彩色显
示设备• 块传输功能和光栅操作码• 笔和刷子• 打印• 光标• 形状绘制功能
![Page 31: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/31.jpg)
Windows CE 不支持的 GDI 功能• 坐标空间转换函数,坐标设备与设备空间
等价• 时区变换 API
• 彩色光标
![Page 32: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/32.jpg)
class GDIOBJ{
public: static HTABLE* m_pHTable; // 句柄表
INT16 m_nCount; // 引用计数
UINT16 m_nIndex; // 句柄表索引
GDIOBJ(); ~GDIOBJ();
ULONG Increment(); ULONG Decrement();
void RemoveFromHandleTable();
BOOL IsStockObject();
virtual BOOL DeleteObject();
virtual int GetObject(int CntBytesBuffer,void* pObject)=0;
virtual DWORD GetObjectType()=0;
virtual GDIOBJ* SelectObject(DC*)=0;};
基本 GDI 对象的基类- GDIOBJ
![Page 33: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/33.jpg)
GDI 的图形原语• 矩形• 折线• 多边形• 椭圆• 圆角矩形• 原语是由驱动程序画线和填充小区域实现的
– 画线的工具:画笔– 填充区域的工具:刷子
![Page 34: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/34.jpg)
画笔• 普通画笔
– BLACK_PEN– WHITE_PEN– NULL_PEN– 用 GetStockObject 函数选择
• 特殊画笔的定义项目– 线宽– 颜色– 画笔类型
![Page 35: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/35.jpg)
画笔类型
画笔 类型PS_SOLID
PS_DASH
PS_NULL
画实线画点划线
不画线
![Page 36: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/36.jpg)
刷子• 刷子是用于描绘闭合形状内部区域的图形对象• Windows CE 支持三种类型的逻辑刷
– 标准刷:Windows CE维护了 21种标准刷– 实心刷:在 8X8像素的正方形中包含 64 个同色像素– 模板刷: 使用 CreatePatternBrush 或 CreateDIBPa
tternBrushPt来创建• SelectObject 函数将逻辑刷选入设备环境• GetStockObject 函数可以选择一种标准刷• CreateDIBPatternBrushPt 用来设计任何尺寸、颜色和模式的画刷
![Page 37: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/37.jpg)
原语转换成画笔和画刷• 以画矩形为例:调用设备驱动程序时,对
于矩形区域内部使用一个画刷工具,而对于矩形外边缘,使用 4 个小区域。首先使用选入设备描述表中的画刷填充矩形区域内部,然后使用选入设备描述表中的画笔描绘矩形外边缘。
![Page 38: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/38.jpg)
Windows CE 中支持的画笔• 由于考虑内存空间的局限性, Windows C
E 不支持在桌面 Windows 中支持的一些特殊画笔,如末端为方角形或斜角形,以及一些图形基本元素,如粗画笔、粗线椭圆等
![Page 39: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/39.jpg)
调色板
• 调色板是输出设备能够显示的颜色的集合• Windows CE没有标准彩色调色板,每次
创建设备环境时, Windows CE 将创建一个默认调色板
• 不能改变默认调色板中的颜色,但是可以创建自己的逻辑调色板,并将它选入设备环境取代默认调色板
![Page 40: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/40.jpg)
创建逻辑调色板• 赋值 LOGPALETTE 结构的各成员,并将
结构指针传递给 CreatePalette 函数• 调用 SelectPalette 函数将调色板选入当前
设备环境• 调用 RealizePalette 函数使系统调色板与当
前设备环境的调色板相同
![Page 41: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/41.jpg)
位图• 位图是一个位数组,将其映射到输出设备上的矩
形像素数组是就可以创建图像• 位图是可以用来在设备环境中创建、绘制、操作
和检索图像的图形对象• 可以将位图想象为一种由象素阵列组成的图画,这些象素可以在屏幕上显示出来
• 分类:– 设备相关位图 (DDB)– 设备无关位图 (DIB)
• Windows CE 支持独有的 4 色位图格式
![Page 42: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/42.jpg)
DDB
• 是依赖于特定 DC 特征的位图,并且不能很容易地移植到具有不同特征的 DC
• 没有自己的颜色表,只有在与创建位图的设备具有相同的显存结构的设备上才能正确显示
• Windows CE 支持 1 、 2 、 4 、 8 、 16 、24 和 32 位颜色
![Page 43: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/43.jpg)
创建 DDB
• 调用 CreateCompatibleDC 创建一个与指定设备兼容的内存设备环境
• 使用函数 CreateBitmap 和 CreateCompatibleBitmap来创建位图
• CreateCompatibleBitmap 创建了与传送给该函数的设备环境的格式兼容的位图
• 当用 CreateCompatibleDC 函数返回的句柄进行绘制的,输出并不显不在设备的绘图表面,而是存储在内存中,调用 BitBlt 函数将位图数据从源设备环境中的位图复制到目标设备环境的位图
• StretchBlt 函数将位图从源矩形复制到目标矩形,同时扩展或压缩位图以使位图和目标矩形匹配
![Page 44: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/44.jpg)
DIB
• DIB 存储的图像中有它们自己的颜色信息• 使用 CreateDIBSection来创建位图• 调用 SelectObject 函数将 DIBSection 选
入设备环境• DIB 部件将内存 DC 与同样包含 DC 的位
的缓冲区关联起来,以允许程序员在保持对组成位图的位的直接访问的同时在设备环境个选择 DIB
![Page 45: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/45.jpg)
位图文件结构
文件头
位图信息头 BI TMAPI NFOHEADER
调色板 RGBQUAD[]
BMP
文件
BI TMAPFI LEHEADER
DI B
BI TMAPI NFO位图信息
位图数据
![Page 46: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/46.jpg)
字体• 字体由它的字样、样式和大小表示
– 字样决定了图案符号的特定特征,如字符中的粗笔划和细笔划的相对宽度
– 样式决定了字体的重度(右浅到黑)和倾斜度(直体或斜体)• Windows CE 支持光栅字体和 TrueType 字体技术,但
在特定系统中只能使用一种类型的字体,而且是在设计系统时决定的,应用程序无法改变
• 光栅字体利 TrueType 字体之间的区别与每个字符或符号的图案在各自的字体资源文件中的存储方式有关– 光栅字体的图案符号是一个表示单一字符的小位图,通常被认为与设
备相关,不易缩放– TrueType 字体的图案符号包含轮廓和提示,被认为与设备无关,易于缩放
![Page 47: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/47.jpg)
字体(续)• 字体的图案符号存储在字体资源文件中
– 光栅字体的字体资源文件存储在一个 .fot 文件中– TrueType 字体有两个文件:一个小的 .fot头文件和
一个包含实际数据的 .ttf 文件• 使用字形高速缓冲存储器来减少显示字形的时间
– 有两种控制它的方法• 在建立Windows CE 系统时就设置好它的大小• 当字体被丢弃时在 Windows CE 系统上运行独立的应用程
序进行控制– 和字体句柄相联系– 默认容量为 4KB
![Page 48: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/48.jpg)
LOGFONT 结构• 在系统内部,字体是以一个 LOGFONT 结构来表示的。其结
构成员意义如下表
成员 意义 成员 意义
lfHeight 设备单元中字体的高度 lfStrikeOut 是否加删除线lfWidth 平均的字符宽度 lfCharSet 选择的字符集
lfEscapement以 0.1° 为单位指定每行文本输出
时相对于页面底端的角度 LfOutPrecision 输出精度
lfOrientation以 0.1° 为单位指定字符基线 相对
于页面底端的角度 lfClipPrecision 剪辑精度
lfWeight 字体重量(范围 0-1000 ) lfQuality 输出质量
lfItalic 是否斜体 lfPitchAndFamily字符间距和选择
的字体族
lfUnderline 是否加下划线lfFaceName
[LF_FACESIZE]字体名
![Page 49: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/49.jpg)
• Windows CE 提供字体连接功能,从而可以用基字体显示基字体中不存在被连接字体中存在的字符
• 枚举注册表登基键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink 的子键可以得到被连接字体和基字体之间的映射情况
• 增加附加的连接:创建附加的子键– "base font face name" = "path and file to link to," "face name of
the font to link"
允许字体连接
基字体被连接字体 连接
![Page 50: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/50.jpg)
创建用户自定义字符• 最终用户定义的字符 (EUDC) 可以为设备
定义字符或图案符号• EUDC总是需要与一个双字节字符集 (DBC
S) 和一种 TrueType 字体相关联
![Page 51: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/51.jpg)
创建 EUDC
1. 在指定范围或保留字符的范围内选择一个字符值
2. 用 EUDC 编辑器创建字符的形状和样式3. 向 TrueType 字体中相应于选择的字符值
的记录中增加形状和样式信息
![Page 52: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/52.jpg)
EUDC 字体与另一种字体关联1. 将 EUDC 字体复制到一个文件夹中, EUDC 字
体文件的扩展名是 .tte2. 调用 EnableEUDC(FALSE)3. 修改 HKEY_CURRENT_USER\EUDC注册表登记键
4. 在 HKEY_CURRENT_USER\EUDC 下创建子键
5. 在上步创建的子键中输入包含 EUDC 的字体路径
6. 调用 EnableEUDC(TRUE)
![Page 53: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/53.jpg)
使用字体的函数
CreateFontIndirect 创建字体
GetTextMetrics 查询字体特征
EnumFontFamilies 枚举字体
![Page 54: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/54.jpg)
显示驱动程序接口 (DDI)• 是 Windows NT DDI 的子集,仅使用了最基本的图
形引擎函数和驱动程序函数• 显示设备驱动程序和 Windows NT 的差别
– 一般都具有相同的功能, GDI 并不查询确定程序的参数及性能信息
– 遇到复杂操作时显示驱动程序将回调 GDI ,将操作分成简单的几步
– 被编译成 DLL 文件而 LIB 文件• 显示驱动程序必须实现一套 DDI 函数,以完成初始
化和显示图像的功能• 显示驱动程序还使用图形原语引擎 (GPE) 类,提供了基本的代码,使用这些代码导出硬件的显示驱动程序,提高了开发和测试效率,而且使显示驱动程序对硬件加速更加容易
![Page 55: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/55.jpg)
GDI 的组件
或
DirectX
窗口管理器
Palnat Palmin
Mgrast TrueType
设备环境表
位图
设备独立位图部件
调色板
区域
绘图打印
Mgblt2
Mgblt1
绘图文本
东方国家字体
基础
Mgrast2
16位图形
字体
![Page 56: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/56.jpg)
2 设计 Windows 用户界面• 设计原则• 设计窗口和对话框• 设计菜单• 选择控件• 使用颜色的原则• 使用图标
![Page 57: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/57.jpg)
• 给予用户控制 权• 使用熟悉的概念• 保持一致性• 允许交互式发现• 提供反馈信息• 强调美观• 简化设计• 支持多种输入方法
设计原则
![Page 58: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/58.jpg)
设计窗口和对话框• Windows CE 不支持用户改变窗口大小• 三种对话框
– 应用程序定义的对话框– 消息框–属性表单
![Page 59: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/59.jpg)
当 X和 OK执行同一函数时,选 OK
不要同时在对话框和命令栏中同时放 OK按钮
原则
对话框中的按钮
![Page 60: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/60.jpg)
设计菜单• Windows CE 不支持菜单栏,而是将菜单栏和工具栏组合为命令栏
• 四种类型的菜单–弹出式–滚动式–级联式– 下拉式
![Page 61: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/61.jpg)
使用命令栏 • 为了尽量扩大客户区屏幕可用尺寸, Windows C
E 支持一种新的控件——命 令栏• 组合了菜单栏、工具栏和可选的地址栏• 命令栏的长度可以从 240像素到 640像素.这取
决于屏幕的分辨率• Windows CE 支持多个命令栏• 命令栏里可以放置
– 组合框– 编辑框– 按钮
![Page 62: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/62.jpg)
选择控件• 窗口控件 --发送 WM_COMMAND 消息• 公共控件 --发送 WM_NOTIFY 消息
– 基础控件– 文件控件– 标度控件– 信息控件–杂类控件
![Page 63: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/63.jpg)
窗口控件
• 复选框• 下压按钮• 组合框• 编辑控件• 滚动条
• 单选按钮• 组框• 下拉式列表框• 列表框• 静态控件
![Page 64: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/64.jpg)
基础控件• 命令条• 命令栏• 工具栏• 属性表单• 卡片控件• Rebar 控件
![Page 65: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/65.jpg)
文件控件• 标题头控件• 图像列表• 树形视图• 列表视图• 旋转框• 轨迹条
![Page 66: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/66.jpg)
信息控件• 进度条• 日期和时间选择器• 状态栏• 日历• 工具提示
![Page 67: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/67.jpg)
杂类控件• HTML浏览器• Rich Ink
• 语音录制器
![Page 68: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/68.jpg)
使用颜色的原则• 屏幕上一次显示的颜色不超过四种,整个应用程序使
用的颜色不超过八种• 将颜色与其他强调技术一 起使用,以区分界面上的
区域或识别重要功能• 避免使用频谱梢对的颜色组合,如红和蓝或黄和紫,
它们会图像显得模糊• 设计应用程序时主要考虑灰度级显示器• 用颜色对比度提高视图效果,一旦用户的眼睛适应了
模糊的颜色,可能就无法辨别• 避免使用缺乏对比度的颜色和具有相同亮度的颜色,这些颜色不易区分
• 使用黑色、白色和灰色提高分辨率• 使用通用的颜色关联提高熟悉程度,如红色表示停止,绿色表示前进
![Page 69: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/69.jpg)
使用图标• 图标表示属性或任务,有效的图标可以清楚地表现其功能
• 图标通常用于按钮上,但也可以用于进度指示器
![Page 70: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/70.jpg)
3 定制用户界面• 创建一个皮肤• 可以换肤的控件• 皮肤示例代码• 其它用户界面定制项目
![Page 71: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/71.jpg)
3.1 创建皮肤
• 皮肤– 允许定制控件及其它用户界面 元素的外表– 通过修改默认的关于控件及窗口的 非客户区的 dra
wing代码来创建• 定制用户界面
– 每个控件对应一个 C++类– 需要改变类的方法的实现
• 实例 XP皮肤
![Page 72: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/72.jpg)
创建皮肤(续)• 通过更改皮肤可以适应限制、增加灵活性及丰富产品
的外表• Windows CE 将可换肤的元素的 drawing代码和其它代码分开,以支持创建皮肤
• Drawing代码所在的文件的目录 $(_WINCEROOT)\public\common\oak\drivers\skinnableui
• Platform Builder自动将更改后的实现并入 GWES 模块,并包含在操作系统中
![Page 73: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/73.jpg)
3 定制用户界面• 创建一个皮肤• 可以换肤的控件• 皮肤示例代码• 其它用户界面定制项目
![Page 74: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/74.jpg)
3.2 可以换肤的控件• 公共控件
– 标题头控件、 进度条、 Rebar 、 工具条和跟踪条• 窗口控件
– 按钮、组合框、列表框、滚动条、静态控件• 控件所在 路径
– $(_WINCEROOT)\public\common\oak\drivers\skinnableUI\gwe
![Page 75: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/75.jpg)
定制控件的 原则-避免使用以下控件
• 难以使用的控件• 挨的太近的控件• 难以理解的控件• 难以区别的的控件• 被隐藏的控件• 不可预测的控件
![Page 76: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/76.jpg)
3 定制用户界面• 创建一个皮肤• 可以换肤的控件• 皮肤示例代码• 其它用户界面定制项目
![Page 77: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/77.jpg)
3.3 代码位置: buttonview.cppVoid ButtonView_t::DrawGroupBoxText(HWND hwnd, /* 窗口句柄 */HBRUSH hbr, /*刷子 */HDC hdc, /* 设备环境 */WORD alignment /* 对齐 */)
{RECT rc;CalcRect(hwnd, hdc, &rc, CBR_GROUPTEXT, 0,alignment); /* 计算矩形 */GweBypassCoredllThunk_t::InvalidateRect_I(hwnd,&rc, TRUE); /*使矩形无效 */PaintRect(GweBypassCoredllThunk_t::GetParent_I(hwnd), hwnd, hdc, hbr, &rc); /* 重绘矩形 */return;}通过更改代码来实现定制皮肤,如更改对齐等
![Page 78: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/78.jpg)
3 定制用户界面• 创建一个皮肤• 可以换肤的控件• 皮肤示例代码• 其它用户界面定制项目
![Page 79: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/79.jpg)
3.4 其它用户界面定制项目
• 非客户区窗口• 系统颜色• 字体• 操作系统用户界面组件
– 内存不足用户对话框– 启动用户界面– 触摸屏刻度屏
![Page 80: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/80.jpg)
非客户区窗口• 更改代码的位置: \WINCE400\public\common\oak\dri
vers\skinnableui\gwe\nclient\Nclientview.cpp• 可以更改的方法(类 NonClientView_t)
BoundingRect BoundPointCalcClientRectWithHorzScrollBarsCalcClientRectWithNoScrollBarsCalcClientRectWithVertScrollBarsDoesHorzScrollBarFit DoesVertScrollBarFit DoHitTest DoPaint DrawBorder DrawFrameControl ExposedDrawFrameControl WidgetRect
![Page 81: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/81.jpg)
系统颜色• 通过更改注册表入口来实现定制颜色: HK
EY_LOCAL_MACHINE\SYSTEM\GWE\SysColor
• 此入口包含了 27 个 DWORD 值
![Page 82: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/82.jpg)
字体• 通过定制字体可以改变操作系统的外表• Windows CE 允许以下操作 :
替换字体 ClearType
使能反锯齿字体使能字体连接
(EUDC) 例如亚洲语言字符
![Page 83: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/83.jpg)
• 内存不足对话框– 当内存低时跳出以便用户重新分配对象存储– 定制此对象的目录 \WINCE400\public\common\oak
\drivers\oomUI\.• 启动用户界面
– 用户唤醒设备时出现– 更改代码的目录 \WINCE400\public\common\oak\dr
ivers\startUI\.• 触摸屏校准屏幕
– 触摸屏校准组件用于物理位置到屏幕坐标的映射– 更改代码的目录 \WINCE400\public\common\oak\dr
ivers\CalibrUI\
操作系统用户界面组件
![Page 84: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/84.jpg)
总结• GWES 概述
– USER– GDI
• 设计 Windows 用户界面– 设计原则– 设计窗口和对话框– 设计菜单– 选择控件– 使用颜色的原则– 使用图标
• 定制用户界面– 创建一个皮肤– 可以换肤的控件– 皮肤示例代码– 其它用户界面定制项目
![Page 85: 嵌入式操作系统原理 —— Windows CE](https://reader033.vdocuments.site/reader033/viewer/2022061409/56814da4550346895dbaff2c/html5/thumbnails/85.jpg)
资源• 《Microsoft Windows CE 用户界面服务指南》,(美)微软公司 著, 希望图书创作室 译,北京希望电子出版社,1999
• 《Windows CE.NET 系统分析及试验教程》,陈向群 王雷 马洪兵 向勇 等编著,机械工业出版社, 2003
• Windows CE.NET help• MSDN library• Microsoft Windows CE.NET train: 2540_Developing Emb
edded Solutions for Windows CE .NET• 《Windows CE.NET 内核定制及应用开发》,周毓林 宁杨 陆贵强 付林林 编著,电子工业出版社, 2005