目标:学习如何使用画笔画常见图型。
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(); //删除字体对象
}
}