MFC作图基础知识

//demo1(在视图类中的OnLButtonup()中添加如下代码)
//Platform SDK: Windows GDI

HDC hdc;//设备上下文句柄
hdc = ::GetDC(m_hWnd);//全局的GetDC函数,需要一个窗口句柄作为参数
::MoveToEx(hdc, m_point.x, m_point.y, NULL);//m_point为类成员变量
::LineTo(hdc, point.x, point.y);
::ReleaseDC(m_hWnd,hdc);//全局的ReleaseDC函数


//demo2(在视图类中的OnLButtonup()中添加如下代码)
//利用CDC对象
//CDC类封装了设备上下文,内部有窗口句柄,设备上下文句柄
CDC *pDC = GetDC();//CWND类的成员函数
pDC->MoveTo(/*m_point.x, m_point.y*/m_point); //MoveTo被重载
pDC->LineTo(/*point.x, point.y*/point);
ReleaseDC(pDC);//CWND类的成员函数


//demo3(在视图类中的OnLButtonup()中添加如下代码)
//CClientDC隐式调用了GetDC()和Release(),声明周期结束自动调用Release()
CClientDC dc(this);
dc.MoveTo(m_point);
dc.LineTo(point);


//demo4(在视图类中的OnLButtonup()中添加如下代码)
//CWindowDC对象
CWindowDC dc(GetParent());
//CWindowDC dc(GetDesktopWindow());
CWindowDC dc(this);
dc.MoveTo(m_point);
dc.LineTo(point);

//demo5(在视图类中的OnLButtonup()中添加如下代码)
//选择画笔粗细,形状,颜色

CPen pen(PS_DASHDOTDOT, 10, RGB(255,50,0));
CClientDC dc(this);
CPen *oldPen = dc.SelectObject(&pen);//返回旧的Cpen类型的指针
dc.MoveTo(m_point);
dc.LineTo(point);
dc.SelectObject(oldPen);//还原

//demo5(在视图类中的OnLButtonup()中添加如下代码)
//利用位图创建画刷
CBrush brush(RGB(255,0,0));
CBitmap bitmap;//创建位图对象
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);//利用位图创建画刷
CClientDC dc(this);
dc.FillRect(CRect(m_point, point), &brush);


//demo6(在视图类中的OnLButtonup()中添加如下代码)
//创建透明画刷
CClientDC dc(this);
//CBrush不能构造或者初始化为透明的画刷对象
//GetStockObject获取储备的透明画刷,返回画刷句柄, CBrush::FromHandle将句柄转换为指针
CBrush *brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *oldbrush = dc.SelectObject(brush);
dc.Rectangle(CRect(m_point, point));
dc.SelectObject(oldbrush);


//demo6(在视图类中OnMouseMove()中添加如下代码)
//用鼠标绘制连续的红色线条
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *oldpen = dc.SelectObject(&pen);

if(m_bBtdown==true)
{
	dc.MoveTo(m_point);
        dc.LineTo(point);
	m_point = point;//m_point记录上一次的点
}
 dc.SelectObject(&oldpen);










你可能感兴趣的:(windows,null,mfc)