MFC画线需要起点坐标和终点坐标,利用通过MoveTo函数和的LineTo函数来连接起点和终点形成线.MFC提供了一个绘图的封装类CDC,CDC类的派生类如下图所示,所以MFC的画线就有5种:CDC,CDlinetDC,CMeatFileDC(未验证),CPaintDC,CWindowDC本文对上述四种方法进行演示。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cHWuVjMiVTOXlFco5mYohmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxgTO5AzMzETMxMDMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
画图就是得到当前画图窗口的设备描述表,一般使用的GetDC()函数获得;然后将其与CDC设备描述表相关联。
m_ptOrigin画线起点,点画线终点。
1.CDC
CDC * pDC = GetDC();
了pdc->通过MoveTo(m_ptOrigin);
了pdc->的LineTo(点);
ReleaseDC(PDC);
2. CClientDC是CDC的派生类,在构造函数时调用DetDC,在分构时调用ReleaseDC,所以在使用时不需要显示的调用GetDC函数.CClientDC
dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(点);
3.一个CPaintDC对象只在响应一个WM_PAINT消息的时候被使用,通常是在你的OnPaint消息处理成员函数中。
void CDrawView :: OnPaint()
{
CPaintDC dc(this); //绘制
dc.MoveTo(10,10)的设备上下文;
dc.LineTo(500500);
}
也可以定义将绘制(DC)函数,并把绘制函数写在Opaint函数里,在绘制利用写绘图函数。
4.CWindowDC是CDC的派生类,在构造函数时调用DetDC,在分构时调用ReleaseDC,所以在使用时不需要显式的调用GetDC函数。
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(点);
5.可以利用SDK函数来画图。
HDC hdc;
hdc = :: GetDC(m_hWnd); // SDK函数
MoveToEx(HDC,m_ptOrigin.x,m_ptOrigin.y,NULL);
的LineTo(HDC,point.x,point.y);
:: ReleaseDC(m_hWnd,HDC);
CDC 是MFC的DC的一个类,HDC是DC的句柄。 API中的一个类似指针的数据类型.CDC等设备上下文类,含有都类一个的成员变量:m_hDc,用来保存与该类相关的句柄。其道理与CWnd的类提供m_Wnd成员变量保存与窗口相关的句柄。通过SDK函数的GetDC(m_hWnd)得到当前设备句柄。