新闻中心

EEPW首页>嵌入式系统>设计应用> ARM平台的Microwindows图形编程

ARM平台的Microwindows图形编程

作者: 时间:2012-06-26 来源:网络 收藏

设备无关的图形引擎层
系统中最核心的图形函数是在图形引擎层通过调用下层的硬件设备驱动程序实现的。用户应用程序通常不直接调用引擎层的例程,而是调用最上层所提供的编程接口。将核心的图形引擎例程独立于应用程序接口主要是基于以下考虑:核心的例程在Client/Server环境中总是驻留在Server端,这些例程调用的位图与文字格式经过优化处理,使得执行速度更快,所以这些格式通常与应用程序所使用的不同。另外,核心例程常使用指针以产生更复杂高效但逻辑性较差的代码,而不是采用应用程序通常使用的ID号。在的源代码中,核心的例程通常包含在Devdraw.c、Devclip.c、Devmouse.c、Devkbd.c和DevpalX.c文件中:
设备上下文
应用程序必须在调用图形绘制API函数前设置设备上下文。一些信息如目前采用的坐标系统、当前窗口在程序执行过程中相当长的时间内是不变的,所以没有必要传递给每一个调用的函数,因而可以通过设备上下文的设置,将这些相对持久的信息通知系统。同时,如当前前景色、当前背景色等很多属性也应在设备上下文中设置。可以通过调用GetDC来得到目前的设备上下文,当结束一系列绘制以后,调用ReleaseDC函数释放DC对象。
消息传递机制
API之间最基本的通讯机制是消息传递。一个消息包含有一个约定的消息号、两个参数:wParam和lParam。消息被存储在应用程序的消息队列中,可以通过调用函数GetMessage()获取。当等待消息时,应用程序被阻塞。一些消息和硬件事件相关,如WM_CHAR代表键盘输入、WM_LBUTTONDOWN代表鼠标左键按下。同时,窗口的创建与消除事件分别对应WM_CREAT和WM_DESTROY消息。在通常情况下,每个消息都对应于一个用HWND标识的窗口。在获取消息后,应用程序通过调用DispatchMessage()将消息分派到所对应的窗口进行处理。当窗口建立时,该窗口所对应的各种消息的处理函数同时被定义,所以系统知道向哪一窗口传递消息。 消息传递机制允许核心的API通过对应各种事件的消息传递来实现各种功能,如窗口的创建,绘制,移动等等。通常情况下,相关的窗口操作消息都由DefWindowsProc函数来进行默认的处理,这样就使得所有窗口的动作在行为上具有一致性,当某一窗口需要特殊的操作时,用户可以通过改写处理程序来满足要求。 可直接处理消息的函数包括SendMessage、PostMessage、PostQuitMessage、GetMessage和DispatchMessage。
窗口的创建和消除
一个Microwindows应用程序的入口点是WinMain函数,而不是通常情况下的Main()。在Microwindows API中,最基本的显示单元是窗口,窗口定义了一个显示区域和与其相关的各种消息的处理函数。可以通过预定的类型,如按键(button)、文本框(editboxs)等来定制窗口,同时也可以由用户定义特殊的类型。无论通过什么方式定义类型,创建窗口和消息通讯的方法是相同的。与创建和消除窗口相关的函数有RegisterClass、UnRegisterClass、CerateWindowEx、DestroyWindow、GetWindowLong和SETWindowLong。
窗口的显示和移动
ShowWindow函数允许设备窗口属性为可视或者隐藏。该属性也可以在窗口创建的过程中由CreateWindowEx实现。窗口的移动包括窗口位置或者大小的变化。当窗口位置改变时,系统发送WM_MOVE消息;当窗口大小改变时,系统发送WM_SIZE消息。
窗口绘制
在其它窗口发生移动,导致某一窗口需要被绘制或重新绘制时,Microwindows系统会发送WM_PAINT消息给相关的窗口过程。这时,由应用程序决定调用图形操作函数来绘制窗口。Micro windows为每个窗口维护一个UPDATE域,当UPDATE非空时就向窗口发送WM_PAINT消息。为了速度方面考虑,WM_PAINT消息只在应用程序队列里没有其它消息的情况下才会发送,这保证了应用程序对窗口的重绘可以一步完成,而不会被分割成好多步骤。如果不希望等待,可以调用UPDATEWindow函数强制进行窗口重绘。
窗口区域和绝对坐标
每一个窗口在显示屏上绘制时,都应参照显示屏像素点的绝对坐标进行。Microwindows API允许应用程序编程人员在窗口中不包括标题栏的区域内使用以窗口左上角为基准的相对坐标,这部分区域称为客户区域。GetClientRect函数和GetWindowRect函数将返回客户区域和窗口的绝对坐标。ClientTo Screen函数和ScreenToClient函数则完成绝对坐标与相对坐标之间的相互转换。

结语
通过将Microwindows移植到平台,在保持对系统资源低消耗的同时,在基于中实现了类似X Windows桌面系统的友好图形用户界面。熟悉图形应用程序的用户可以在该系统上编写自己的图形应用程序。在未来的设计中,Microwindows将发挥更大的作用。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭