手把手 MFC 绘图入门

目标:学习如何使用画笔画常见图型

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();                      //删除字体对象
       }
}


你可能感兴趣的:(mfc,CPen)