EVC应用程序图形编程实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EVC 图形类应用程序编程实验
1 实验:图形类编程实验
1.1 目标:
l熟悉 EVC4 编程环境
l熟悉 eMbedded Visual C++ 4.0 基本绘图函数的应用
l学会利用 eMbedded Visual C++ 4.0 绘制常用的图形
l利用 EVC 编写应用程序并下载在模拟器上运行
l EVC 下的调试工具
1.2 预备:
在进行这个实验之前,您应该首先:
l在您的机器上安装了EVC4+SP4
l在 PC 上安装了 teach SDK(WinCE5 中文模拟器)
l具备 EVC 或 VC 平台的开发知识
1.3 实验内容
利用 eMbedded Visual C++ 4.0 编写一个Windows CE5.0 操作系统上的应用程序。
该 应用程序为基于 MFC的应用程序,窗口采用 SDI模式(Single Document),并利用图形函 数绘制 Windows CE 5.0 下的常见图形。
将窗口平均分为四个区域,显示结果如下:
1.4 实验原理
应用程序通过调用 MFC (Microsoft Foundation Class )绘图类库的强大绘图能力,绘制 各种常见的图形。
MFC 设备环境类定义了逻辑显示画面,提供了绘图方法,而 GDI 对象 则提供了 CDC 类绘图时的工具。
在绘图时,利用 CDC 类的 SelectObject 方法选入 GDI 绘 图工具, 在调用绘图方法时就会采用GDI 绘图工具。
MFC 定义了对应于Windows CE 5.0 绘 图工具的图形对象,包括画笔、画刷、字体、位图、调色板和绘图区域等。
本实验仅是绘制图形,所以应该在视图类的 OnDraw()函数中编写代码。
(可以在工作 区中的 Class View 选项卡中找到此函数)。
程序中所用到的函数都可以通过按 F1 在在线 帮助中找到参考,下面简要进行介绍,详细的请看 EVC 的在线帮助。
1.4.1 绘图区域
本实验在整个客户窗口中绘制,所以绘图的区域可以通过以下方式获得:
CRect crect; //定义一个矩形
GetClientRect(&crect); //得到窗口区域,该区域信息保存在 crect 中
int MaxX = crect.Width(); //窗口区域的宽度 int MaxY = crect.Height(); //窗口区域的高度
整个矩形区域的坐标原点在左上角。
方向如右图所示。
1.4.2 画笔、画刷 由于实验中需要绘制彩色图形,所以不能直接使用默认的笔,有必要创建自己的彩笔。
//创建新画笔
CPen *pMyPen = new CPen();
pMyPen->CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); //参数分别指定了线型、宽度和色彩
创建了自己的彩笔后,还需要替换当前环境的笔,可以采用以下方式:
CPen *pOldPen; //用于保存当前的笔,以便于绘制完成后再恢复
pOldPen = pDC->SelectObject(pMyPen);
采用以上的方式可以在绘图时按所定义的笔画图,如果要进行色彩填充,还需要定义 画刷,实验内容中所看到的绿色背景的矩形框、红色背景的椭圆,就是通过定义画笔和画刷 来实现色彩变化的。
画刷的定义和使用与画笔类似:
CBrush *pOldBrush; //保存系统原有画刷
CBrush brushGreen(RGB(0, 255, 0)); //创建一个绿色画刷
pOldBrush = pDC->SelectObject(&brushGreen);//选择绿色画刷
1.4.3 画分隔线
在获得绘图区域后,可以采用画线函数绘出分隔的横、竖线。
画线执行为两个步骤:
1. 将笔放到画线的开始处:pDC->MoveTo(StartPointX, StartPointY)
2. 从开始处采用定义的画笔画到终点:pDC->LineTo(EndPointX, EndPointY)
0, 0 MaxX
MaxY
1.4.4 画矩形
MFC 中画矩形的函数是:
BOOL Rectangle( int x1, int y1, int x2, int y2 );
//四个参数分别是左上角和右下角的坐标值
或直接采用矩形结构为参数:
BOOL Rectangle( LPCRECT lpRect );
1.4.5 画椭圆
MFC 中画椭圆的函数是:
BOOL Ellipse( int x1, int y1, int x2, int y2 );
//四个参数分别是左上角和右下角的坐标值
或直接采用矩形结构为参数:
BOOL Ellipse( LPCRECT lpRect );
1.4.6 画圆角矩形
MFC 中画圆角矩形的函数是:
BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 );
//前四个参数分别是左上角和右下角的坐标值,后两个参数为画圆角的宽和高或直接采用矩形结构、点为参数:(point 的 X和 Y分别代表圆角的宽和高) BOOL RoundRect ( LPCRECT lpRect , POINT point);
1.4.7 画多边形
MFC 中画多边形的函数是:
BOOL Polygon ( LPPOINT lpPoints, int nCount );
第一个参数定义多边形的各个点坐标,后一个参数为点数
Example
void CMyView::OnDraw(CDC* pDC)
{
// Find the client area.
CRect rect;
GetClientRect(rect);
// Draw with a thick blue pen.
CPen penBlue(PS_SOLID, 5, RGB(0, 0, 255));
CPen* pOldPen = pDC->SelectObject(&penBlue);
// And a solid red brush.
CBrush brushRed(RGB(255, 0, 0));
CBrush* pOldBrush = pDC->SelectObject(&brushRed);
// Find the midpoints of the top, right, left, and bottom
// of the client area. They are the vertices of the polygon.
CPoint pts[4];
pts[0].x = rect.left + rect.Width()/2;
pts[0].y = rect.top;
pts[1].x = rect.right;
pts[1].y = rect.top + rect.Height()/2;
pts[2].x = pts[0].x;
pts[2].y = rect.bottom;
pts[3].x = rect.left;
pts[3].y = pts[1].y;
// Calling Polygon on the array draws three lines
// between the points and an additional line to
// close the shape from the last point to the first point.
pDC->Polygon(pts, 4);
// Put back the old objects.
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}
1.4.8 写字
MFC 中输出文字的函数可以用:
BOOL ExtTextOut ( int x, int y, UINT nOptions, LPCRECT lpRect, const CString&str, LPINT lpDxWidths );
² X:指定用于放置字符串的基准点的逻辑X坐标。
² Y:指定用于放置字符串的基准Y坐标。
² nOptions:指定如何使用lpRect定义的矩形,此参数可为下列值的组合:
n ETO_CLIPPED:正文将裁剪到矩形中。
n ETO_OPAQUE:用当前的背景色来填充矩形。
² lpRect:指向结构RECT的指针,其中包含了用于裁剪或作不透明物矩形的尺寸。
可以为NULL
² str: 被绘制的字符串
² lpDxWidths:指向可选数组的指针,其中数组里的值表示相邻字符单位开始处间距离。
如果该参数为 NULL,则ExtTextOut使用字符之间的缺省间隔。
比如:
pDC->ExtTextOut(20, 35, ETO_CLIPPED, NULL, "Green Rectangle", NULL);
1.5 说明
1. 如果单步调试时,出现如图所示的窗口时,选择“Cancel”忽略。
1.6 尝试
本实验是在EVC4 中实现, 但是也可以在 VS2005 中实现, 有时间的同学可以尝试一下, 将本实验在 VS2005 中采用 VC++来完成,注意是使用 VS2005 中的智能设备应用程序。