标签:window 成员函数 cto log view win counter 大小 ati
void CTestoneView::OnDraw(CDC* pDC) { CTestoneDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 }
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 srand((unsigned)time(NULL)); //使用系统时间初始化随机种子,使得每次产生不同的随机数 COLORRET crColor; //声明一个COLORRET变量crColor,用于存放像素点的颜色值 int x,y; //声明像素点位置坐标 /* 用随机颜色在x轴负向绘制对角点为(-150,-50)和(-50,50)的正方形*/ for(y=-50;y<50;y++) for(x=-150;x<-50;x++) pDC->SetPixelV(x,y,RGB(rand()%255,rand()%255,rand()%255)); //产生0~255的随机数 /* 读取正方形内每个像素点的颜色crColor,并在x轴正向的对称位置上绘制该正方形*/ for(y=-50;y<50;y++) for(x=-150;x<-50;x++) { crColor=pDC->GetPixel(x,y); pDC->SetPixelV(-x,y,crColor); }
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 CPoint p0(-100,-50),p1(100,50); //定义直线段的起点坐标和终点坐标 CPen NewPen,*pOldPen; //定义一个CPen类的画笔对象NewPen和一个画笔对象指针pOldPen NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); //调用Cpen类的CreatePen()成员函数,创建一个像素宽的蓝色实线画笔 pOldPen=pDC->SelectObject(&NewPen); //调用CDC类的SelectObject()成员函数将新画笔选入设备上下文,同时用pOldPen指针保存原画笔指针 pDC->MoveTo(p0); //将当前位置移动到直线段起点p0 pDC->LineTo(p1); //从起点绘制直线段到终点p1 pDC->SelectObject(pOldPen); //在新画笔使用完毕后,调用CDC类的SelectObject()成员函数,用pOldPen指针保存的原画笔将设备上下文恢复原状
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 rect.DeflateRect(100,100); //将矩形两个方向都缩小100个像素 CPen NewPen,*pOldPen; //定义一个CPen类的画刷对象NewPen和一个画刷对象指针pOldPen NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255)); //创建一个1像素宽的蓝色实线画笔 pOldPen=pDC->SelectObject(&NewPen); //将新画笔选入设备上下文,同时用pOldPen指针保存原画笔指针 pDC->Rectangle(rect); //绘制方角矩形 CBrush NewBrush,*pOldBrush; //定义一个CBrush类的画刷对象NewBrush和一个画刷对象指针pOldBrush NewBrush.CreateSolidBrush(RGB(255,0,0)); //创建一个红色画刷 pOldBrush=pDC->SelectObject(&NewBrush); //将新画刷选入设备上下文,同时用pOldBrush指针保存原画刷指针 pDC->RoundRect(rect,CPoint(200,200)); //绘制圆角矩形 /*将设备上下文恢复原状*/ pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush);
注:由于是将客户区缩小100个像素定义的矩形,所以随着窗口大小的改变,矩形能自动改变大小。
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 rect.OffsetRect(rect.Width()/2,-rect.Height()/2); /*定义两个矩形*/ CRect rect1(CPoint(-250,50),CPoint(250,150)); CRect rect2(CPoint(-250,-150),CPoint(250,-50)); CBrush Brush(HS_BDIAGONAL,RGB(255,0,0)); //构造红色阴影画刷,也可以用CratHatchBrush()函数来定义 pDC->FillRect(&rect1,&Brush); //使用阴影画刷填充rect1 pDC->FillSolidRect(&rect2,RGB(255,0,0)); //使用红色填充rect2
注:阴影画刷定义后,可以直接在Fillrect函数中使用,并不需要进入系统。
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 rect.DeflateRect(100,100); CBrush *pOldBrush; pOldBrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH); //为设备上下文选入透明画刷 int r=rect.Height()/2; //根据矩形rect的高度定义圆的半径 CRect rect1(CPoint(-r,-r),CPoint(r,r)); //定义圆的外接矩形 pDC->Ellipse(rect1); //绘制圆 pDC->Ellipse(rect); //绘制椭圆 pDC->Rectangle(rect); //绘制外接矩形 pDC->SelectObject(pOldBrush); //将设备上下文恢复原状
注:1,由于SelectStockObject()函数的返回类型是CGdiObject*,而pOldBrush的类型是CBrush*,需要进行强制类型转换。
2,如果不适用透明画刷,按照先画圆,后画椭圆、矩形的顺序绘制,因为图形使用默认的白色画刷填充,绘制结果只有矩形,圆和椭圆会被遮挡。
CRect rect; //定义矩形 GetClientRect(&rect); //获得客户区矩形 pDC->SetMapMode(MM_ANISOTROPIC); //设置映射模式 pDC->SetWindowExt(rect.Width(),rect.Height()); //设置窗口 pDC->SetViewportExt(rect.Width(),-rect.Height()); //设置视区:x轴水平向右为正,y轴垂直向上为正 pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2); //设置客户区中心为坐标系原点 rect.OffsetRect(-rect.Width()/2,-rect.Height()/2); //客户区矩形校正 CPoint Twelve(0,rect.Height()/2),Three(rect.Width()/2,0); //定义12点和3点的位置 CPen penBlack,penBlue,*pOldPen; penBlue.CreatePen(PS_SOLID,1,RGB(0,0,255)); //蓝色实线画笔 penBlack.CreatePen(PS_DASHDOT,1,RGB(0,0,0)); //黑色点划线画笔 /*从12点到3点顺时针绘制蓝色实线椭圆弧*/ pDC->SetArcDirection(AD_CLOCKWISE); //顺时针绘制12点到3点 pOldPen=pDC->SelectObject(&penBlue); pDC->Arc(rect,Twelve,Three); /*从12点到3点逆时针绘制黑色点划线椭圆弧*/ pDC->SetArcDirection(AD_COUNTERCLOCKWISE); //逆时针绘制12点到3点 pOldPen=pDC->SelectObject(&penBlack); pDC->Arc(rect,Twelve,Three); pDC->SelectObject(pOldPen);
标签:window 成员函数 cto log view win counter 大小 ati
原文地址:http://www.cnblogs.com/OctoptusLian/p/6659163.html