一:移位运算,求解释?
情形一:
----------------------------------------------------
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);
}
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);
}
}