wince用户界面与图形子系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows CE支持的GDI功能
• 光栅字体和TrueType字体 • 定制彩色调色板以及调色和非调色的彩色显 示设备 • 块传输功能和光栅操作码 • 笔和刷子 • 打印 • 光标 • 形状绘制功能
Windows CE不支持的GDI功能
• 坐标空间转换函数,坐标设备与设备空间 等价 •Hale Waihona Puke Baidu时区变换API • 彩色光标
case WM_KEYDOWN: switch(wParam) { Case VK_HOME:……Break; Case VK_END:……Break; …… Default:……Break; }
字符消息
• 用户输入字符时,Windows CE并不自动产生字 符消息,而是产生击键消息。 • 应用程序消息循环应调用TranslateMessage函数 将击键消息转换为相应的字符消息 • Windows CE的四条字符消息
– 线宽 – 颜色 – 画笔类型
画笔类型
画笔 PS_SOLID PS_DASH PS_NULL
类型 画实线 画点划线 不画线
刷子
• 刷子是用于描绘闭合形状内部区域的图形对象 • Windows CE支持三种类型的逻辑刷
– 标准刷:Windows CE维护了21种标准刷 – 实心刷:在8X8像素的正方形中包含64个同色像素 – 模板刷: 使用CreatePatternBrush或 CreateDIBPatternBrushPt来创建
1.2 GDI(Graphics Device ( Interface) )
• 用于控制文本和图形的显示 • 使用GDI 画直线,曲线,闭合图形、文本、位 图等 • GDI使用设备上描述表 (DC)存储特定设备 的绘图的属性,包括画笔、画刷、字体、 位图、调色板等 • Windows CE 支持打印机设备描述表、显 示设备描述表和内存设备描述表
• 完全配置包含所有的GWES组件
Windows CE图形子系统的结构
消息框 OOM Splash类
对话框管理器 窗口管理器 事件管理器
控 件
编 辑 框
列 表 框
组 合 框
按 钮 … …
菜 单
1.1 USER系统 系统
• 三个核心组件
– 消息队列 – 事件管理器 – 用户输入系统
USER部分的主要结构 部分的主要结构
活动窗口 每个线程有一个特定的窗口称为活动窗口 活动窗口和其子窗口可以是焦点窗口 焦点窗口 焦点窗口能够接收来自键盘的消息 前台窗口 系统中一个特定的线程或者消息队列称为前 台线程,前台线程中的活动窗口是前台窗口
三个窗口的关系图
SetActiveWindow(…) SetFocus(…) SetForegroundWindow(…)
void RemoveFromHandleTable(); BOOL IsStockObject(); virtual BOOL DeleteObject(); virtual int GetObject(int CntBytesBuffer,void* pObject)=0; virtual DWORD GetObjectType()=0; virtual GDIOBJ* SelectObject(DC*)=0;};
– – – – WM_CHAR WM_SYSCHAR WM_DEADCHAR WM_SYSDEADCHAR
接收来自输入笔的输入
• 通过输入笔在触摸屏上的点击可完成类似鼠标的 操作。 • Windows CE支持的输入笔的消息
– – – – WM_LBUTTONDBLCLK —用户双击屏幕 — WM_LBUTTONDOWN —用户单击屏幕 WM_LBUTTONUP —用户从屏幕上抬起输入笔 WM_MOUSEMOVE —用户在笔尖接触屏幕时移动输 入笔
• 创建一个窗口时发送WM_CREATE • 删除一个窗口时发送WM_DESTROY • 窗口客户区改变需要重绘时发送WM_PAINT
– 可选参数
• 意义和取值取决于消息标识符 • 可为整数、组合位标志、结构指针或其它信息
消息队列的功能
• 接收消息并将消息发送到相应的窗口 • 保存输入状态信息,比如光标的大小、提 示符闪烁率等
SendMessage的同线程消息处理 流程
. . . SendMessage(hWnd…);
发送消息队列 接收消息队列 发送消息堆栈 绘图请求 消息列表 其他 WndProc( ) . . .
SendMessage的异线程消息处理 流程
. . . SendMessage(hWnd…); 发送消息队列 接收消息队列 发送消息堆栈 绘图请求 消息列表 其他 发送消息队列 接收消息队列 发送消息堆栈 GetMsg(&msg) 绘图请求 消息列表 其他 WndProc( ) . . .
• GWES集成GDI,窗口管理器和事件管理器。 • GWES模块是Windows CE中最高度组件化的部分,包括 两个子群
– USER——处理消息、事件、用户输入 – GDI——负责图形输出
GWES组件模型
• 最小配置用于创 建最基本的 Windows CE版 本,包括操作系 统内核 (Core.d11)和选 定的GWES支持 组件,如 – 消息处理 – 用户输入 – 电源管理 而不显示UI, 也不包括窗 口管理功能
PostMessage的消息处理流程
. . PostMessage(hWnd…); . . GetMessage(&msg) DispatchMessage(&msg) 发送消息队列 接收消息队列 发送消息堆栈 绘图请求 消息列表 其他 WndProc( ) . . .
输入管理
• 输入管理由一套子系统完成,负责处理以下几 个相互关联的窗口
消息传送的两个基本函数
• SendMessage()
– 同步消息传送机制 – 消息队列和线程一一对应
• PostMessage()
– 异步消息传送机制 – 每个窗口都和一个与特定线程相关的消息队列联系在 一起 – 窗口是消息传送的目的地
其它消息处理函数
GetMessage DispatchMessage TranslateMessage TranslateAccelerator IsDialogMessage PeekMessage RegisgerWindowsMessage 从消息队列中得到消息 将GetMessage找回的消息分发给一 个窗口程序 将一个键盘消息转换为字符消息 处理菜单命令对应的加速键 确定一个消息是否为一个对话框所需 要,如果是则处理这个消息 检索一个消息,并存放这个检索信息 到结构 定义一个新的窗口消息,它保证将在 整个系统中均可使用
应用程序 应用程序
GWE
消息循环系统 SendMessage() PostMessage() 用户输入系统
Msgque
前台窗口 活动窗口 焦点窗口
Wmbase 光 标 剪贴板
Winmgr 窗口管理器 GDI 显示驱动程序
驱动程序
键盘驱动程序
触摸设备驱动程序
消息处理
• 消息
– 消息标识符(识别消息的命名常数)
xOrigin yOrigin cxOffset cyOffset cxWriting
cyMid cyBase cyWriting cyBox
cxBox
手写体识别过程
1.调用HwxConfig函数:为应用程序初始化识别引擎 2.调用HwxCreate函数:创建HRC(手写识别上下文)对象 3.调用HwxSetGuide函数:定义处理用户输入的识别框 4.调用HwxALCValid和HwxALCPriority函数:定义识别准则 5.调用HwxSetContext函数:向HRC对象传递早先识别的字符 6.当用户书写时,调用HwxInput函数:向HRC对象传送手写数据 7.调用HwxProcess函数:向识别引擎传递HRC对象 注:如果使用不完全识别(用于识别汉语等复杂的多笔划语 言字符),则对于每个输入笔划重复步骤7 8.调用HwxResultsAvailable函数:获得已经识别的字符数 9.调用HwxGetResults函数:获得识别引擎结果 10.调用HwxDestroy函数:删除当前的HRC对象,表示识别过程 的完成
嵌入式操作系统原理 ——Windows CE 第七章 用户界面与图形子系统
内容提要
• GWES概述 • 设计Windows用户界面 • 定制用户界面
1 GWES概述
• GWES
Graphics Windowing Event Manager Subsystem Win32 应用编程接口(API), 用户界面 (UI), 和图形设备接口 (GDI) 库的组合 – 是用户、应用程序和操作系统之间的接口 – – – – –
• 中等配置包括操作系统核心并支持以下 GWES功能
– – – – – – – – – – 消息处理及用户输入 电源管理 提示性发光二极管(LED) GDI,包括Microsoft TrueType字体和光栅字 体,文本绘制,调色板和打印 可定制的触摸和校准UI 网络UI对话 波形API管理器 输入方法管理器(IMM) 窗口和对话管理 可定制UI
– ASCII字符集的所有94个字符 – 各种图形字符,如中文、日文、韩文,并产生 相应的Unicode输出
HWXGUIDE结构
• 定义用于字符输入的识 别框的大小和位置 • 基线(cyBase)和中线 (cyMid)主要用于识别 字符,对于识别图形字 符不需要 • 使用多个识别框时,偏 移参数在各个识别框之 间形成了一定的缓冲区, 以防止一个识别框内的 字符覆盖另一个识别框 的字符
• • • • • 键盘 鼠标 触摸屏和输入笔 输入面板 手写体识别
键盘输入模型
键盘 扫描码 键盘设备驱动程序 消息 虚键码 转换消息 系统消息队列 字符 系统消息队列 消息 线程消息队列 消息 线程消息循环 消息 窗口过程
处理键盘消息
• 窗口以击键消息和字符消息的形式接收键 盘输入 • 非系统击键
接收来自输入面板的输入
• 没有键盘输入的Windows CE设备需要模拟键盘 输入的输入方法(IM),Windows CE实现了一个通 过触摸屏操作的输入面板结构 • Windows CE lM需要两个部分: lM
– 软件输入面板子系统 – IM
• 输入面板子系统完成非键盘输入到键盘事件的转 换,也负责管理软件输入方法
– WM_KEYDOWN – WM_KEYUP
• 系统击键
– WM_SYSKEYDOWN – WM_SYSKEYIP
WM_KEYDOWN消息
• 收到此消息时,应该检查消息中包含的虚键 码,以确定如何处理击键,虚键码包含在消 息的wParam参数中。另外通常程序只处理非 字符键产生的击键。典型代码框架:
输入面板通信示意图
应用程序 键盘驱动分发系统 GWES 键盘事件 输入面板 IInPutMethod IIMCallback IM
• 输入面板调用 IInputMethod借口创 建IM,然后就可以 接收用户输入 • IM通过IIMCallback 接口将数据传输给 输入面板
手写识别
• Windows CE.NET手写体识别引擎目前能 够识别
活动窗口
焦点窗口
触摸输入事件和键盘输入事件的处理
输入消息队列 GWE输 入线程 键盘输入消息
触摸设备 驱动程序 键盘驱 动程序
触摸设备输入消息 窗口管理器 PostMessage()
PostMessage()
发送消息队列 . . . 接收输入事件的合适窗口
Windows CE支持的用户输入的 类型
GDI的图形原语
• • • • • • 矩形 折线 多边形 椭圆 圆角矩形 原语是由驱动程序画线和填充小区域实现的
– 画线的工具:画笔 – 填充区域的工具:刷子
画笔
• 普通画笔
– – – – BLACK_PEN WHITE_PEN NULL_PEN 用GetStockObject函数选择
• 特殊画笔的定义项目
基本GDI对象的基类-GDIOBJ 对象的基类- 基本 对象的基类
class GDIOBJ{ public: static HTABLE* m_pHTable; //句柄表 句柄表 INT16 m_nCount; UINT16 m_nIndex; GDIOBJ(); ULONG Increment(); //引用计数 引用计数 //句柄表索引 句柄表索引 ~GDIOBJ(); ULONG Decrement();