WinCE下图形用户界面的开发

       NET精简框中访问图形对象的方法

       在显示屏上绘图, .NET精简框程序必须拥有 Graphics类的一个实例。对.NET精简框类的研究发现, 有两种方法可以访问 Graphics 对象[3]: 一种方法是调 Paint 事件, 通过Paint 事件中提供的 PaintEventArgs 参数的属性访问 Graph-ics 对象。它由系统发出, 主要处理窗体中的绘图, 并通知一个窗体其内容需要重绘;另一种方法是调用 CreateCraphics函数,利用调用返回的 Graphics 对象绘图。虽然 Create-Graphics 方法名称表示创建了一个 Graphics 对象,但事实上并非如此。它只是向窗体″ 租用″ 了 Graphics 对象, 完成调用 Graphics 对象后必须调用 Dispose 方法返回对象。2 WinCE 操作系统下基于 VB.NET的窗体背景界面实现方法
       在桌面系统中为窗体设计一个漂亮的界面,可以直接加入 Picturebox控件, 再将其属性中的 Image 项修改为需要的图片。采用这种方法, 程序启动时, 图片就显示在背景窗体上,但读取一幅图片,需要消耗大量的内存空间。基于VB.NET的界面程序, 启动时本身需求的内存空间就非常可观,如果背景图片所需内存空间过大,可能会导致程序挂起。 另外, 考虑嵌入式系统频率低、 内存少的自身特性, 编写好的应用程序, 应尽量节省内存空间。制作背景时, 我们采用的方法是调用绘图函数。
       绘制窗体背景通常有两种方法。一种是使用窗体事件Form_Paint;另一种是使用重绘事件 Onpaint。它们都提供PaintEventArgs 参数,利用该参数的属性访问 Graphics 对
象, 编写绘图代码可以绘制窗体背景。由于这两个 Paint 事件都是由系统发出的, 当窗体创建、 隐藏、 放大或缩小时, 它们都会自动调用 Paint 函数中的代码重绘。值得注意的是:

       绘制 窗 体 背景时, 不 能 调 用 事 件 Form_Load。 调 用Form_Load 事件绘制的窗体背景在窗体中一闪而过, 不能长时间停留, 达不到显示的效果。
       OnPaint 函数定义格式为 Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)。 Form_paint 函数定义格式为 Private Sub Form_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)Handles
MyBase.Paint。利用 e 参数的属性访问 Graphics 对象,可以绘制线条、 多边形和各式文字。 采用这种方法绘制的窗体背景所占用的内存空间比读取整幅图片时少得多,正好符合嵌入式系统内存少的特点。
       多个背景的窗体无效后重绘先前背景的实现方法
       显示屏是多任务、多线程操作系统 WinCE 的共享资源。 为了避免程序间的冲突, 同一时间系统只允许向显示屏发出的一个 Paint 绘图事件。创建、 隐藏、 滚动、 放大或缩小窗体和打开新文件都会使原来的窗体无效。 窗体无效后, 系统自动调用 Paint 函数重绘窗体背景。 但对于多个背景的窗体, 窗体无效后, 如何使 Paint 函数重绘无效前的背景是我们要解决的问题。
       我们通过在 OnPaint 函数中设置旗帜变量实现了窗体无效后重绘先前背景功能。方法如下:
  (1)创建一个图形对象。定义格式如下: Dim gp As Graphics = CreateGraphics();
  (2)在主窗体中定义一个旗帜变量。根据不同情况设置特定枚举值;
  (3)使用条件语句判断绘图代码。 符合哪个枚举值, 就绘制相应的背景。
      下面举例说明具体的实现方法。图 1 是一个窗体结构示意图。 其中虚箭头表示绘制窗体背景事件, 实箭头表示窗体无效事件。 窗体无效后, 绘制哪一个背景图是我们要解决的问题。 三个虚箭头分别表示绘制声音录制、 波形显示和频谱显示的背景图。我们在主窗体中设定一个flag变量, 标识主窗体无效前的背景图片。录制声音时,flag的值置 1; 显示波形时, flag的值置 2; 显示频谱时, flag的值置 3。当主窗体调用打开保存文件、 输入信息或显示结果事件后, 主窗体无效。 这时系统将自动调用 OnPaint 函数, OnPaint 函数根据flag的值, 绘制窗体无效前的相应背景。

image

       随着嵌入式系统应用领域的不断扩大,嵌入式系统开发需要考虑图形用户界面问题。我们在 WinCE 系统上开发语音频谱分析仪时, 需要处理大量的图形绘制问题。 根据我
们的实践经验, 总结出了一些实现图形用户界面的方法。 通过调用 paint 函数绘制窗体背景,有效地节省了内存空间;通过在 OnPaint 函数中设置旗帜变量实现了窗体无效后重绘先前背景的功能。

posted @ 2008-08-06 16:46  齐.net  阅读(2370)  评论(0编辑  收藏  举报