- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WINCE屏幕绘图
第2章 屏幕绘图概述在第1章,示例程序HelloCE完成一项工作:在屏幕上显示一行文字。显示这行文字只需要调用一次DrawText即可,因为Windows CE代为处理了很多细节,例如字体、字体颜色、文本行在屏幕上的位置等等。借助图形用户接口的力量,应用程序不只能在屏幕上输出本文行,还能做更多的事情。应用程序可以绘制出非常精细的显示外观。
纵观微软Windows操作系统,用于绘制屏幕的函数数量发生了巨大的扩展。Windows每个后续的版本里,都增加了许多函数以扩展程序员可以使用的工具集。虽然新函数增加了,但旧函数依然被保留,这样即使有旧函数被新函数取代,旧程序依然可以继续运行在新版本的Windows上。这种函数不断堆积,旧函数被保留以向后兼容的策略,在最初的Windows CE版本里却被废弃了。因为需要制作更小版本的Windows,CE团队苦览Win32 API,并只复制适合Windwos CE目标市场的应用程序绝对需要的API。
这种精简对Win32 API影响最大的领域之一就是图形函数。到不是您会缺乏用于工作的函数,只是在Win32 API的冗余度方面,对图形函数做了教大的精简。程序员面临的新挑战之一就是不同的Windows CE平台支持略微不同的API集合。Windows CE图形功能与桌面系统不同之处,其中之一就是Windows CE不支持不同的映射模式,而这在其他Windows系统里是支持的。Windows CE设备环境始终设置为MM_TEXT映射模式。坐标转化在Windows CE下也不支持。虽然这些特性在一些类型的应用中很有用,但在小型便携式设备的Windows CE环境里,这些需求并不突出。所以当你阅读本章里使用的函数和技术时,请记住其中一些可能不能在所有平台上被支持。通过GetDeviceCaps函数,程序可以判断系统支持什么函数。GetDeviceCaps返回当前图形设备的实际能力。贯穿本章始末, 当判定在目标设备上什么函数被支持时,我会谈到GetDeviceCaps函数的。
像书中第一部分里其它章节一样,本章回顾Windows CE所支持的绘画功能。需要记住的最重要的事情之一是虽然Windows CE不支持全部Win32 图形API,但它的快速发展使它可以支持一些Win32里必威体育精装版的函数--其中一些非常新,可能您对它们都不熟悉。本章将为您展示您可以使用的函数以及如何在这个有一些函数不被Windows CE支持的领域里工作。
绘图基础综观历史,Windows被细分成三个主要部分:核心层,处理进程和管理内存;用户层,处理窗口接口和控件;图形设备接口(GDI)负责底层绘制。在Windows CE里,用户层和GDI层合成为图形窗口及事件处理器,即GWE。你可能有时会听Windows CE程序员谈起GWE。GWE并不是什么新事务,只是标准Windows部件的不同包装而已。在本书里,我通常将GWE的图形部分依然称为GDI,以保持和标准Windows编程术语的一致性。
不论你是为Windows CE、2000、还是XP编写程序,需要做的不仅仅是处理WM_PAINT消息这么简单。理解什么时候和为什么WM_PAINT消息要被送到窗口是很有益处的。
有效和无效区域某些情况下,窗口的一部分暴露给用户,这些部分在Windows里称为区域,这些区域被标记为无效。当应用程序消息队列里没有其它消息在等待处理并且应用程序窗口包含有无效区域的时候,Windows会给窗口发送WM_PAINT消息。正如第一章里提到的,处理WM_PAINT消息的绘制操作是包含在BeginPaint和EndPaint调用之间的。BeginPaint实际上执行很多动作。首先将无效区域标记为有效,接下来计算需要裁减的区域。裁减区是限制绘图动作的区域。BeginPaint接下来发送WM_ERASEBACKGROUND消息,如果需要,还会重绘背景,如果用于指示文本输入的光标可见,它还会隐藏光标。最后BeginPaint获得显示设备环境变量的句柄,该句柄可以用于应用程序中。EndPaint函数则释放设备环境,如果必要,还会重新显示光标。如果WM_PAINT处理过程没有更多的操作要执行,您也必须至少调用BeginPaint 和EndPaint ,以便将无效区域标记为有效。
作为替代,您可以调用ValidateRect来强制使矩形有效。但这种情况下没有绘制动作发生,因为应用程序在窗口上绘制任何东西之前,必须有设备环境句柄。
应用程序经常需要强制重画它的窗口。应用程序决不应该邮递或发送(post or send)WM_PAINT消息给自身或其它窗口。您应该使用以下函数:
BOOL InvalidateRect (HWND hWnd, const RECT *lpRect,
文档评论(0)