CPaintDC, 用于在窗口客户区画图(仅限于在OnPaint处理函数中使用);
CClientDC, 也用于在窗口客户区画图(限于在OnPaint处理函数之外使用);
CWindowDC, 用于在窗口内任意地方画图,包括非客户区;
CMetaFileDC, 用于绘制GDI图元文件。
画线:
HDC方法
HDC hdc;
Hdc=::GetDC(m_hWnd);// ::是全局函数
MoveToEX(hdc,m_ptOrifin.x, m_ptOrifin.y,NULL); //Cpoint m_ptOrigin;前面已经定义和赋值
LineTo(hdc,point.x,point.y);//point是函数本身参数,确定当前鼠标的位置
::ReleaseDC(m_hWnd,hdc);
CDC类方法
CDC *pDC=GetDC();
pDC ->MoveTo(m_ptOrigin);
pDC ->LineTo(point);
ReleaseDC(pDC);
CClientDC类的方法 //自动在对象建立和析构时 完成部分任务
CClientDC dc(this); //this是本类窗口的指针 若是GetParent() 则返回副类的窗口(Frame)的指针,则画线可以到框架窗口中
dc.MoveTo(m_ptOringin);
dc.LineTo(point);
CWindowDC类的方法// 窗口内任意地方画图,包括非客户区
CwindowDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
CwindowDC在Cview中和Cclient没什么区别
但当把this改成GetParent()不仅可以访问框架窗口了 还有系统菜单 等整个窗口 包括客服区和非客服区
若是GetDesktopWindow()则可以访问整个桌面
------------------------------------------------------------------
CRect类与Windows RECT结构相似,并且还包括操作CRect对象和Windows RECT结构的成员函数。
在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect对象来代替。
RECT结构的数据成员(left,top,right,和bottom)也是CRect的可访问数据成员。
---------------------------------------------------------------------------------------------------------------
画笔
---------------------------------------------------------------------------------------------------------------
CPen pen(PS_SOLD,1,RGB(255,0,0));//第一个是现实模式 2是线粗细 3是颜色
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);//SelectObject 是绑定画笔
dc.MoveTo(m_ptOrigin);
dc.Line(point);
dc.SelectObject(pOldPen);
画刷
CBrush brush(RGB(255,0,0));
CRlientDC dc(this);
dc.FillRcet(CRect(m_ptOringin,point),&brush);
位图的画刷
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(Crect(m_ptOrigin,point),&brush);
画矩形
CClientDC dc(this);
dc.Rectangle(CRect(m_ptOrigin,point));
但画出的矩形相互遮盖
因为画矩形时里面有个默认白色画刷,所以画矩形时就填充了
实现交叉
CClientDC dc(this);
CBrush *pBrush=Cbrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH);
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);
画 线 用
CClient dc(this);
if(m_bDraw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
画有颜色
CClient dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_bDraw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
dc.SetectObject(pOldPen);
画扇形
CClient dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_bDraw==TRUE)
{ //dc.SetROP2(R2_MERGENOTPEN);或操作
dc.MoveTo(m_ptOrigin); dc.MoveTo(m_ptOrigin);
dc.LineTo(p_ptOld); dc.LineTo(p_ptOld);
dc.MoveTo(m_ptOrigin); dc.MoveTo(m_ ptOld);
dc.LintTo(point); dc.LintTo(point);
m_ptOld=point; m_ptOld=point;
}
dc.SetectObject(pOldPen);