MFC学习笔记(六)

一:移位运算,求解释?

情形一:

----------------------------------------------------

int i=1<<32;      

执行后i的值为0

-----------------------------------------------------

情形二:

----------------------------------------------------

int a=32;

int i=1<<a;

执行后i的值为1

----------------------------------------------------

二:

void CMainWindow::OnPaint()
{	
	CPaintDC dc(this);	
	dc.SelectObject(&CBrush(RGB(255,0,0)));   //State 1, 不可行
	//CBrush brush=CBrush(RGB(255,0,0));     //State 2, 可行
	//dc.SelectObject(&brush);
	//dc.SelectObject(new CBrush(RGB(255,0,0)));  //State 3, 可行,记得delete
	CPen pen=CPen(PS_SOLID,10,RGB(0,255,0));
	CPen* pOldPen=dc.SelectObject(&pen);
	dc.Rectangle(10,10,100,100);
}

三:画弧函数CDC::Arc理解

函数定义BOOL CDC::Arc(LPCRECT lpRect, POINT ptStart, POINT ptEnd),其中lpRect为圆/椭圆的外接矩形,ptStart为弧的起点,ptEnd为弧的终点,

画弧的规则为逆时针进行绘制。当ptStart,ptEnd为圆/椭圆上的点时容易理解,当ptStart,ptEnd不在圆/椭圆上时,分别连接圆心点和ptStart,

连接圆心点和ptEnd点,能确定两条直线,通过直线与圆的交点来确定弧的起始点和结束点。

实验一:ptStart,ptEnd在圆上

void CMainWindow::OnPaint()
{	
	CPaintDC dc(this);
	CRect rect(0,0,100,100);
	CPoint point1(100,50);
	CPoint point2(0,50);		
	dc.Arc(rect,point1,point2);
}


实验二:ptStart,ptEnd不在圆上

void CMainWindow::OnPaint()
{	
	CPaintDC dc(this);
	CRect rect(0,0,100,100);
	CPoint point1(100,0);
	CPoint point2(0,0);	
	dc.MoveTo(50,50);
	dc.LineTo(100,0);
	dc.MoveTo(50,50);
	dc.LineTo(0,0);
	dc.Arc(rect,point1,point2);
}


四:创建透明画刷:

CBrush* pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

创建透明画笔:

CPen pen=CPen(PS_NULL,10,RGB(0,0,255));

CPen* pPen=CPen::FromHandle((HPEN)GetStockObject(NULL_PEN));

创建透明 背景:

CPaintDC dc(this);

dc.SetBkMode(TRANSPARENT)

五:画尺子程序,了解SetBkMode(TRANSPARENT)的作用

void CMainWindow::OnPaint()
{	
	CPaintDC dc(this);
	dc.SetMapMode(MM_LOENGLISH);
	dc.SetTextAlign(TA_CENTER|TA_BOTTOM);
	dc.SetBkMode(TRANSPARENT);         //对比下有无该句的差别
	CBrush brush(RGB(255,255,0));
	CBrush* pOldBrush=dc.SelectObject(&brush);
	dc.Rectangle(100,-100,1300,-200);
	dc.SelectObject(pOldBrush);
	for(int i=100;i<1300;i+=25)
	{
		dc.MoveTo(i,-192);
		dc.LineTo(i,-200);
	}
	for(int i=150;i<1300;i+=50)
	{
		dc.MoveTo(i,-184);
		dc.LineTo(i,-200);
	}
	for(int i=200;i<1300;i+=100)
	{
		dc.MoveTo(i,-175);
		dc.LineTo(i,-200);
		CString string;
		string.Format(_T("%d"),(i/100)-1);
		dc.TextOut(i,-175,string);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值