标题:wince简单绘图
摘要:直线,矩形,椭圆,多边形等简单图形的绘制
备注:Windows CE + VS2005
日期:2010.4.27
=============================================================
①创建画笔
绘制图形之前,可以先创建一个自己想要的画笔。通过CreatePen和CreatePenIndirect两个函数都可以实现。以CreatePen为例,函数原型如下:
HPEN CreatePen(
int fnPenStyle,
int nWidth,
COLORREF crColor
);
fnPenStyle是画笔类型。nWidth是以像素为单位的画笔的宽度。crColor是画笔颜色。
例:创建一个实心的,3个像素宽度的红色画笔。
HPEN hRedPen = CreatePen(PS_SOLID,3,RGB(255,0,0));
②绘制直线
第一种方式是通过Polyline函数来完成,该函数执行一次可以绘制一条或多条直线。
BOOL Polyline(
HDC hdc,
const POINT* lppt,
int cPoints
);
lppt是指向POINT结构体数组的指针。cPoints是点的个数。
例:利用Polyline绘制四条直线组成一个矩形
POINT pts[5];
pts[0].x = 100;
pts[0].y = 20;
pts[1].x = 200;
pts[1].y = 20;
pts[2].x = 200;
pts[2].y = 120;
pts[3].x = 100;
pts[3].y = 120;
pts[4].x = 100;
pts[4].y = 20;
Polyline(hdc,pts,5);
第二种方式是利用MoveToEx和LineTo两个函数来完成画线的功能。利用MoveToEx函数移动到直线的起点,利用LineTo函数绘制到直线的终点。两个函数的使用非常简单。
WINGDIAPI BOOL WINAPI MoveToEx(
HDC hdc,
int X,
int Y,
LPPOINT lpPoint
);
WINGDIAPI BOOL WINAPI LineTo(
HDC hdc,
int nXEnd,
int nYEnd
);
例:
//利用MoveToEx,LineTo绘制四条直线组成一个矩形
MoveToEx(hdc,250,20,NULL);
LineTo(hdc,350,20);
LineTo(hdc,350,120);
LineTo(hdc,250,120);
LineTo(hdc,250,20);
③创建画刷
在绘制矩形,椭圆,多边形前可以创建一个自己满意的画刷,用来填充这些图形。如果是获得系统的预定义画刷可以通过GetStockObject函数来完成。比如GetStockObject(WHITE_BRUSH),获取一个白色的画刷。创建实心画刷可以通过CreateSolidBrush函数来完成。
HBRUSH CreateSolidBrush(
COLORREF crColor
);
例:HBRUSH hBr = CreateSolidBrush(RGB(0,0,255));//创建一个实心的蓝色画刷
还有一个函数CreateDIBPatternBrushPt也可以用来创建画刷,通过该函数可以创建一个阴影形式的画刷,这种画刷通常用来填充棒图。
④绘制矩形
通过Rectangle函数来实现,该函数使用当前画笔绘制矩形边界,使用当前画刷填充矩形内部。
BOOL Rectangle(
HDC hdc,
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect
);
例:Rectangle(hdc,0,0,10,10);//绘制一个长和宽都是10个像素的矩形
⑤绘制圆角矩形
要绘制圆角矩形,可以使用RoundRect函数。
BOOL RoundRect(
HDC hdc,
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect,
int nWidth,
int nHeight
);
nLeftRect,nTopRect,nRightRect,nBottomRect分别是矩形的左,上,右,下边界。
关键是最后两个参数,它们决定了圆角矩形的圆滑程度。简单点说nWidth就是圆角的宽度,nHeight是圆角的高度。
例:RoundRect(hdc,300,150,400,250,30,30); //绘制圆角矩形
⑥绘制圆形或者椭圆形
由Ellipse函数来完成。
BOOL Ellipse(
HDC hdc,
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect
);
nLeftRect是圆形的左边界,nTopRect是圆形的上边界,nRightRect是圆形的右边界,nBottomRect是圆形的下边界。该函数同样使用当前画笔绘制圆形边界,使用当前画刷填充圆形内部。
例:Ellipse(hdc,100,150,200,250); //绘制一个椭圆形
⑦绘制多边形
绘制多边形可以通过Polygon函数来完成,其实也可以用 Polyline 来绘制,两者是基本相同的,不再赘述。