MFC学习笔记(九)

前面已经讲了够多的基础性的东西了,还有一些,但我想还是之后遇到时再写吧,先开始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;
	}
}

 看一下结果:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值