目标:学习如何使用画笔画常见图型。
1. 使用MFC AppWizard(exe)创建一个默认的单文档应用程序(Ex_Draw)。
2. 在CEx_DrawView::OnDraw函数中添加下列代码:
void CRactangView::OnDraw(CDC* pDC) { /* CRactangDoc*pDoc = GetDocument(); //画一个椭圆 ASSERT_VALID(pDoc); CRectrectClient; GetClientRect(rectClient);//获得当前窗口的客户区大小 pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式 pDC->SetWindowExt(1000,1000);//设置逻辑窗口范围 pDC->SetViewportExt(rectClient.right,rectClient.bottom);//设置屏幕视口范围 pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);//设置视口原点 pDC->Rectangle(CRect(-500,-500,500,500)); pDC->Ellipse(CRect(-500,-500,500,500)); ASSERT_VALID(pDoc); //GDI对象使用举例 CPenpenBlack;//定义一个画笔变量 penBlack.CreatePen(PS_SOLID,2, RGB(0,10,100));//创建画笔 //将此画笔选入当前设备环境并保存原来的画笔 CPen*pOldPen = pDC->SelectObject(&penBlack); //绘图 pDC->MoveTo(0,0); pDC->LineTo(30,100); pDC->SelectObject(pOldPen);//恢复设备环境中原来的画笔 //画一串红点 for(int i=0;i<1000;i++) { pDC->SetPixel(CPoint(i,i),RGB(255,0,0)); } //创建红色实心画笔 CPenpen; pen.CreatePen(PS_SOLID,2, RGB(255,0,0)) ; pOldPen= pDC->SelectObject(&pen); pDC->MoveTo(0,0); //在视图的左上角一个X pDC->LineTo(100,100); pDC->MoveTo(0,100); pDC->LineTo(100,0); //恢复设备环境中原来的画笔 pDC->SelectObject(pOldPen); //画矩形 //创建一个红色的实心画刷 CBrushbs; bs.CreateSolidBrush(RGB(255,0,0)); CBrush* pOldBrush = pDC->SelectObject(&bs); CRectrect(0,0,100,100); //画一个长100、宽100的矩形 pDC->Rectangle(&rect); //恢复设备环境中原来的画刷 pDC->SelectObject(pOldBrush); //画圆和椭圆 //创建一个十字线阴影的红色画刷 CBrushbs; bs.CreateHatchBrush(HS_CROSS,RGB(255,0,0)); CBrush* pOldBrush = pDC->SelectObject(&bs); //画一个长100、宽100的矩形 CRectrect(0,0,100,100); pDC->Rectangle(&rect); CRectrect1(0,0,100,100);//在矩形内画圆 pDC->Ellipse(&rect1); CRectrect2(0,0,50,100);//在矩形内画椭圆 pDC->Ellipse(&rect2); //恢复设备环境中原来的画刷 pDC->SelectObject(pOldBrush); //画一个平行四边形 CPointpoly[4];//确定4个顶点 poly[0]=CPoint(0,0); poly[1]=CPoint(50,50); poly[2]=CPoint(50,100); poly[3]=CPoint(0,50); pDC->Polygon(poly,4); //使用逻辑字体控制文本输出 LOGFONTlf; //定义逻辑字体 memset(&lf,0, sizeof(LOGFONT)); lf.lfHeight=100;//字体的逻辑高度 lf.lfWidth=100;//输出宽度 lf.lfWeight=500;//字体的粗细程度,0~1000 lf.lfUnderline=true;//字体有下划线 lf.lfStrikeOut=true; //删除线标志 lf.lfItalic=1; //斜体标志 lf.lfCharSet=GB2312_CHARSET;//字符集汉字必须为GB2312_CHARSET strcpy((LPSTR)&(lf.lfFaceName),"黑体");//字体的名字 CFontcf; cf.CreateFontIndirect(&lf); //创建新字体 CFont*oldfont=pDC->SelectObject(&cf);//使用新字体 pDC->TextOut(100,100,"Hello"); pDC->SelectObject(oldfont);//恢复设备环境原来的字体 cf.DeleteObject();//删除字体对象 */ /* //使用逻辑字体控制文本输出 CStringstr="字体效果"; CFontNewFont; NewFont.CreateFont ( 100,//字体高度 0,//由系统根据高宽比选取字体最佳宽度 0,//文本的倾斜度为0,表示水平 0,//字体的倾斜度为0 FW_DONTCARE,//字体的粗度 true,//斜体 false,//无下滑线 false,//无删除线 DEFAULT_CHARSET,//所用的字符集 OUT_DEFAULT_PRECIS,//输出精度 CLIP_DEFAULT_PRECIS,//剪裁精度 DEFAULT_QUALITY,//默认输出质量 DEFAULT_PITCH|FF_DONTCARE,//字间距和字体系列使用默认值 "黑体" //字体名称 ); CFont*pOldFont; pOldFont=pDC->SelectObject(&NewFont); pDC->SetTextColor(RGB(255,0,0));//设置文本颜色为红色 pDC->TextOut(10,10,str); */ //字体对话框调用举例: LOGFONT lf; //定义逻辑字体 CFontcf; pDC=GetDC(); memset(&lf, 0, sizeof(LOGFONT) ); CFontDialogdlg( &lf ); if(dlg.DoModal()==IDOK) { dlg.GetCurrentFont(&lf); //得到用户选择的新字体 pDC->SetTextColor(dlg.GetColor()); cf.CreateFontIndirect(&lf); CFont*oldfont=pDC->SelectObject(&cf); //使用新字体 pDC->TextOut(100,100,"Hello"); pDC->SelectObject(oldfont); //恢复设备环境原来的字体 cf.DeleteObject(); //删除字体对象 } }