`
kanwoerzi
  • 浏览: 1645903 次
文章分类
社区版块
存档分类
最新评论

绘制图形

 
阅读更多

绘制图形
1:相关CDC类提供的图形绘制方法
MoveTo(int x,int y);用于移动当前的坐标点到指定的位置上
LineTo(int x,int y);用于从当前坐标点绘制一条直线到参数指定的位置
x,y表示x和y轴坐标的终点
Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);
以一个外接矩形为依据绘制一个椭圆的弧线
x1,y1左上角,x2,y2右下角,x3,y3弧线起点,x4,y4,弧线终点
示例代码:绘制五子棋棋盘
在OnPaint()中
else
{
CDC *p=GetDC();//获取设备上下文
CPen pen;//定义画笔
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建颜色画笔
CPen *poldone=p->SelectObject(&pen);//选中当前的画笔
int nOriginX=30;
int nOriginY=30;
for(int i=0;i<10;i++) //绘制列
{
p->MoveTo(nOriginX+i*30,nOriginY); //定位直线的起点
p->LineTo(nOriginX+i*30,300);
}
for(int j=0;j<10;j++) //绘制行
{
p->MoveTo(nOriginX,nOriginY+30*j);
p->LineTo(300,nOriginY+30*j);
}
p->SelectObject(poldone); //恢复原来的画笔
pen.DeleteObject();

CDialog::OnPaint();
}
2 :绘制多边形
常用方法
BOOL Rectangle(int x1,int y1,int x2,int y2),绘制矩形
x1,y1左上角,x2,y2又上角
BOOL Rectangle(LPCRECT lpRect)绘制矩形
lpRect是一个CRect对象指针,标志一个矩形区域
BOOL RoundRect(int x1,int y1,int x2,int y2,int x3,int y3)//绘制圆角矩形
x3,y3表示圆角的宽度和高度
BOOL RoundRect(LPCRECT lpRect,POINT point)//绘制圆角矩形
point表示圆角宽度和高度
BOOL Polygon(LPPOINT lpPoints,int nCount)//利用当前的画笔根据列举的坐标点绘制一个多边形
lpPoint 表示多边形的各个端点
nCount表示lpPoint元素的数量
BOOL Polyline(LPPOINT lpPoints,int nCount)//利用当前画笔绘制坐标点中的直线
lpPoints表示各个端点,相邻的端点将用直线连接
示例:绘制多边形
else
{
CDC *p=GetDC();
CRect rectangle(30,20,120,100);//定义一个矩形区域
p->Rectangle(rectangle);//绘制
CRect round(30,130,120,100);
p->RoundRect(round,CPoint(10,10)); //绘制圆角矩形
CPoint pts[6]={CPoint(300,50),CPoint(400,50),CPoint (450,100),CPoint(400,150),CPoint(300,150),CPoint(500,500)};
p->Polyline(pts,6);

CDialog::OnPaint();
}
3:绘制控件外观
调用CDC类的DrawFrameControl(LPRECTl pRect,UINT type,UINT state)
pRect:控件所在的区域
type:表示控件的类型DFC_BUTTON是按钮,DFC_CAPTION表示标题栏,
DFC_MENU表示菜单,DFC_SCROLL表示滚动条
nState表示绘制控件的风格和状态,依赖于控件的类型

4:填充区域
用某一颜色或位图填充一个区域。CDC类提供了四个填充区域的函数
void FillRect(LPCRECT lpRect,CBrush *pBrush)//用画刷填充
lpRect表示需要填充的矩形区域
pBrush表示一个画刷对象指针,函数用该画刷填充矩形区域
void FillSolidRect(LPCRECT lpRect,COLORREF clr);//用指定的颜色填充矩形区域
clr:标志一个RGB颜色值
BOOL FillRgn(CRgn *pRgn,CBrush *pBrush)//用标志的画刷填充一个选区
pRgn:表示一个选区对象,选区可以通过系统提供的API函数CreateRectRgn,CreateEllipticRgn,CreatePolygonRgn等创建
BOOL FillPath()//用当前的画刷填充路路径

示例:
else
{
CDC *p=GetDC();
CRect item(30,30,100,120); //定义一个区域
CBrush brush(RGB(255,128,128)); //定义画刷
p->FillRect(item,&brush); //使用颜色填充画刷
brush.DeleteObject();

CBitmap bmp;//创建位图对象
bmp.LoadBitmap(IDB_BITMAP1);
brush.CreatePatternBrush(&bmp);//创建位图画刷
CRect bmprc(110,40,200,200);
p->FillRect(bmprc,&brush);
bmp.DeleteObject();
brush.DeleteObject();

CRect rectrc(210,30,300,120);
CRect hrc(280,60,350,140);
p->Rectangle(rectrc);//绘制矩形边框
p->Rectangle(hrc);
HRGN hrect=CreateRectRgn(210,30,300,120);//创建矩形选区
HRGN hrgn=CreateRectRgn(280,60,350,140);
HRGN hret=CreateRectRgn(0,0,0,0);
CombineRgn(hret,hrect,hrgn,RGN_AND);//组合选区,获取公共部分
brush.CreateSolidBrush(RGB(255,0,0));
CRgn rgn; //定义一个选区
rgn.Attach(hret);//将选区对象附加一个选区句柄
p->FillRgn(&rgn,&brush);
brush.DeleteObject();
rgn.DeleteObject();
DeleteObject(hrect);
DeleteObject(hrc);
DeleteObject(hret);
CDialog::OnPaint();
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics