MFC学习笔记(六)

来源:互联网 发布:端口有感叹号 编辑:程序博客网 时间:2024/05/16 11:50

一:移位运算,求解释?

情形一:

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

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, 可行,记得deleteCPen 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);}}



0 0
原创粉丝点击