前面已经讲了够多的基础性的东西了,还有一些,但我想还是之后遇到时再写吧,先开始MFC程序的创建与操作。
图形。
1、先从一个简单的字符串输入程序开始吧。
在一个窗口中输出字符串。
创建一个MFC单文档应用程序,在视图类(以View结尾的)的OnDraw( ) 函数中添加几句话,用来输出字符串:
void CMFCTestView::OnDraw(CDC* pDC)
{
CMFCTestDoc* pDoc = GetDocument(); //获得当前文档对象
ASSERT_VALID(pDoc); //用来判断是否为空
// TODO: add draw code for native data here
pDC->TextOut(50,50,"输出字符串"); //输出字符串的语句
}
2、用CPen类来绘制线条。
先看一个叫RGB的结构体:
COLORREF RGB(
BYTE bRed,
BYTE bGreen,
BYTE bBlue
);
我们用它来定义一种颜色。
要使用画笔CPen之前,得先用新画笔替换旧画笔,这时要用到SelectObject( ) 方法。
原型:CPen *SelectObject( CPen *pPen);
返回的是原来的画笔,这是为了让我们画完之后还能恢复原来的画笔。
void CMFTestView::OnDraw(CDC* pDC)
{
CMFCTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int red=0,green=0,blue=0;
int width=2;
int row=20;
for(int s=0;s<8;s++)
{
int color=RGB(red,green,blue); //黑色
CPen newPen(PS_SOLID,width,color);
CPen*oldPen=pDC->SelectObject(&newPen);//保存旧的画笔
pDC->MoveTo(20,row);//移动到坐标(20,20)
pDC->LineTo(300,row);//移动到坐标(300,20)
pDC->SelectObject(oldPen);
red+=32;
green+=16;
blue+=8; //变化颜色再画
width+=2; //变换宽度
row+=30; //变到下一行
}
}
结果:
3、改变画笔样式
void CMFCTestView::OnDraw(CDC* pDC)
{
CMFCTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int style[]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT}; //最后 一个是指双点下划线画笔
int row=20;
for(int s=0;s<5;s++)
{
CPen newPen(style[s],1,RGB(0,0,0)); //变换画笔的样式
CPen*oldPen=pDC->SelectObject(&newPen);
pDC->MoveTo(20,row);
pDC->LineTo(300,row);
pDC->SelectObject(oldPen);
row+=30;
}
}
结果:
4、CBrush类
画刷工具类。有两个构造函数:CBrush(COLORREF color); 和 CBrush(int style, COLORREF color);
void CMFCexp4_4View::OnDraw(CDC* pDC)
{
CMFCexp4_4Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int red=0,green=0,blue=0;
int row=20;
for(int s=0;s<6;s++)
{
int clr=RGB(red,green,blue);
CBrush newBrush(clr); //调用第一种构造函数
CBrush*oldBrush=pDC->SelectObject(&newBrush); //保存旧画刷,更换新画刷
pDC->Rectangle(20,row,200,row+20); //用新画刷画一个矩形长条
pDC->SelectObject(oldBrush); //改回旧画刷,就相当于你拿了一把锤子去用,用完后把它放回原位
red+=34;green+=16;blue+=4;//改变颜色
row+=30;
}
int styles[]={ HS_BDIAGONAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_HORIZONTAL,HS_VERTICAL}; //画刷的样式
row=20;
for( s=0;s<6;s++)
{
CBrush newBrush(styles[s],RGB(0,0,0));//调用第二种构造函数
CBrush*oldBrush=pDC->SelectObject(&newBrush);
pDC->Rectangle(220,row,400,row+20);
pDC->SelectObject(oldBrush);
row+=30;
}
}
看一下结果: