关闭

vc画线画框画矩形

316人阅读 评论(0) 收藏 举报
分类:

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);

CwindowDCCview中和Cclient没什么区别

但当把this改成GetParent()不仅可以访问框架窗口了 还有系统菜单 等整个窗口 包括客服区和非客服区

 

若是GetDesktopWindow()则可以访问整个桌面

 

 

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

 CRect类与Windows RECT结构相似,并且还包括操作CRect对象和Windows RECT结构的成员函数。

在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect对象来代替。

RECT结构的数据成员(left,top,right,和bottom)也是CRect的可访问数据成员。

默认坐标系:原点为左上角,右边为x轴正方向,下边为y轴正方向。
 
CRect构造矩形的方法:
构造函数(CRect)有五个原型,第二个原型和第三个原型是拷贝构造函数。用其它三个构造函数构造一个左上角坐标为(10,20),x方向边长为100,y方向边
长有200的矩形。

原型一:

CRect r1(10,20,110,220);//左上角坐标为(10,20),x方向边长为100,y方向边

原型四:

POINT pt = {10,20};
SIZE size = {100,200};
CRect r2(pt,size);

原型五:

POINT topLeft = {10,20};
POINT bottomRight = {110,220} ;
CRect r3(topLeft,bottomRight);

 

 

 

 

 

 

 

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

画笔

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

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);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:361800次
    • 积分:3919
    • 等级:
    • 排名:第8318名
    • 原创:18篇
    • 转载:173篇
    • 译文:1篇
    • 评论:61条
    最新评论