孙鑫vc++ 关于简单绘图读书笔记

1.划线

1.1使用sdk划线

void CDrawDemoView::OnLButtonDown(UINT nFlags, CPoint point)

{

       m_ptori = point;

       CView::OnLButtonDown(nFlags, point);

}

 

void CDrawDemoView::OnLButtonUp(UINT nFlags, CPoint point)

{

    HDC Dcdraw= ::GetDC(this->m_hWnd);

    ::MoveToEx(Dcdraw, m_ptori.x, m_ptori.y, NULL);

    ::LineTo(Dcdraw, point.x, point.y);

    ::ReleaseDC(this->m_hWnd, Dcdraw);

    CView::OnLButtonUp(nFlags, point);

}

 

1.2使用mfc划线

    1.2.1 使用cdc类划线

     CDC *dcdraw = GetDC();

     dcdraw->MoveTo(m_ptori.x, m_ptori.y);

     dcdraw->LineTo(point.x, point.y);

     ReleaseDC(dcdraw);

 

    1.2.2 使用CClientDC划线

       CClientDC dcdraw(this);

       dcdraw.MoveTo(m_ptori.x, m_ptori.y);

       dcdraw.LineTo(point.x, point.y);

       说明:CCobject->CDC->CClientDC,CClientDC在创建对象时就会调用GetDC,在对象析构的时候就会调用ReleaseDC,作图只能在客户区

 

    1.2.3 使用CWindowDC划线

        CWindowDC dcdraw(GetDesktopWindow());

           dcdraw.MoveTo(m_ptori);

       dcdraw.LineTo(point);

       说明:CCobject->CDC-CWindowDCCWindowDC在创建对象时就会调用GetDC,在对象析构的时候就会调用ReleaseDC

        作图区域可以包含客户区以及非客户区(菜单栏,标题栏等)

 

     :可以通过设置指向不同窗体的DC的指针,在不同的窗体区域作图

     :GetDesktopWindow()在整个屏幕区域

          GetParent()在当前窗体的父窗体

 

 

2.使用画笔

  CPen pen(PS_SOLID, 1, RGB(255, 0, 255)); //使用RGB宏得到返回值类型是COLORREF

  CClientDC dcdraw(this);

  CPen *penold = dcdraw.SelectObject(&pen); //返回值是原先DC使用的画笔

  dcdraw.MoveTo(m_ptori);

  dcdraw.LineTo(point);

  dcdraw.SelectObject(penold); //避免其他地方用到dc时画笔发生改变

 

3.使用画刷

  3.1使用颜色画刷填充矩形区域

    CBrush CBsh(RGB(255,0,0));

    CClientDC dcdraw(this);

    CBrush *coldbsh = dcdraw.SelectObject(&CBsh);

    dcdraw.FillRect(CRect(m_ptori, point), &CBsh); //CRect可以用来替换要求类型是RECT,LPCRECTLPRECT的参数

    dcdraw.SelectObject(coldbsh);

  

  3.2创建位图画刷

    CBitmap bitmap;

    bitmap.LoadBitmap(IDB_BITMAP1); //使用位图画刷必须初始化位图对象,位图对象初始化可以通过LoadBitmap(资源ID)来实现

                                    //使用路径加载资源错误,需要查找原因

    CBrush bsh(&bitmap);

    CClientDC dcdraw(this);

    CBrush *oldbsh = dcdraw.SelectObject(&bsh);

    dcdraw.FillRect(CRect(m_ptori, point), &bsh);

    dcdraw.SelectObject(oldbsh);

 

  3.3创建透明画刷,绘制矩形

     CClientDC dcdraw(this);

     CBrush *bsh = CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH));

     CBrush *oldbsh = dcdraw.SelectObject(bsh);

     dcdraw.Rectangle(CRect(m_ptori, point));

     dcdraw.SelectObject(oldbsh);

    

     ::GetStockObject(NULL_BRUSH)返回透明背景画刷句柄

     CBrush::FromHandle使用CBrush类的静态成员函数将画刷句柄转换成画刷指针

 

4.关于C++中的静态成员  

  4.1静态数据成员需要在类外部进行初始化,类型 类名::数据成员名 = 赋值 //int classname::varname=3; 不需要加static

  4.2静态成员函数不能使用类内部非静态的数据成员

  4.3静态成员初始化在类的构造函数之前完成

 

5.绘制扇形以及连续线段

  5.1连续线段

     添加WM_MOUSEMOVE消息响应,在判断接受到该消息时鼠标左键已经按下,进行划线操作

     void CDrawDemoView::OnMouseMove(UINT nFlags, CPoint point)

     {

       if(TRUE == m_Mouseflag) //记录鼠标左键按下标志位

       {

           CClientDC DCdraw(this);

           DCdraw.MoveTo(m_ptori);

           DCdraw.LineTo(point);

           m_ptori = point;

       }

       CView::OnMouseMove(nFlags, point);

     }  

   

  5.2绘制扇形

     m_ptori = point; //左按下时键保存原点

     CPen  pen(PS_SOLID, 1, RGB(255,0, 0));

     CClientDC DCdraw(this);

     CPen *oldpen = DCdraw.SelectObject(&pen);

      

     if (TRUE == m_mouseflag)

     {

         DCdraw.MoveTo(m_ptori); //每次绘制从原点到当前点

         DCdraw.LineTo(point);

     }

     DCdraw.SelectObject(oldpen);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
孙鑫vc是一种特殊的混合编程语言,它结合了C语言和Verilog语言的特点。在深入详解孙鑫vc代码之前,我们先了解一下它的一些特性。 首先,孙鑫vc具有高度的可定制性。用户可以根据自己的需求选择C语言和Verilog语言中的特性来编写代码。这种灵活性使得孙鑫vc可以适用于不同的应用领域。 其次,孙鑫vc支持并行计算。它提供了一种简单而有效的方式来利用硬件资源进行并行计算,提高程序的执行效率。 另外,孙鑫vc还具有强大的调试功能。它能够在运行时对代码进行监控和调试,帮助开发者快速定位问题并进行修复。 深入详解孙鑫vc代码包括以下几个方面: 首先,我们可以从代码的结构和组织方式入手。孙鑫vc代码一般由多个模块组成,每个模块包含了各自的功能和接口。 其次,我们需要了解代码中使用的变量和数据类型。在孙鑫vc中,可以使用C语言和Verilog语言中的数据类型,如整型、浮点型等。了解这些数据类型的使用方法和限制对理解代码非常重要。 然后,我们需要分析代码中的控制流和算法。这包括了代码中的条件语句、循环语句等,以及算法的实现细节。通过对控制流和算法的分析,我们可以更好地理解代码的逻辑和实现原理。 最后,我们还需要关注代码中的接口和数据传输方式。在孙鑫vc中,模块之间通过接口进行数据的传递和交互。了解接口的定义和使用方式对于理解代码的功能和模块之间的关系非常重要。 综上所述,深入详解孙鑫vc代码需要从代码的结构和组织方式、变量和数据类型、控制流和算法、接口和数据传输方式等多个方面进行分析和理解。通过对这些方面的研究,我们可以更好地理解孙鑫vc代码,并且能够对代码进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值