• VC++学习/MFC (2)


      搞懂了书上所讲的简单绘图的程序,现在看的关于文本编程就轻松多了。

      先回顾一下,要在做一个可以画直线的程序,主要做的就是两点,一个是LBUTTONDOWN(鼠标左键按下的响应函数)和LBUTTONUP(鼠标左键抬起的响应函数),然后记录一下Origin点和现在的最后的point点就可可以了。

      单纯画直线有很多中方法:

      首先是在LBUTTONDOWN中记录下m_ptOrigin点:

    1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
    2 {
    3     // TODO: Add your message handler code here and/or call default
    4     m_ptOrigin=point;
    5     m_bdraw=TRUE;
    6     CView::OnLButtonDown(nFlags, point);
    7 }

      然后就可以在LBUTTUONUP中操作了,有多重方法:

      (1)

    1     HDC hdc;
    2     hdc = ::GetDC(m_hWnd);
    3     MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
    4     LineTo(hdc,point.x,point.y);
    5     ::ReleaseDC(m_hWnd,hdc);

      (2)

    1     CDC* pDC=GetDC();
    2     pDC->MoveTo(m_ptOrigin);
    3     pDC->LineTo(point);
    4     ReleaseDC(pDC);

      (3)

    1     CClientDC dc(this);
    2     dc.MoveTo(m_ptOrigin);
    3     dc.LineTo(point);

      另外,CClientDC dc(this)后可以用dc.FillRect(m_ptOrigin,point)来画矩形。

    要想画连续线条就得先定义BOOL型的私有成员变量m_bDraw;在鼠标按下去的时候改值为真,鼠标左键弹起时为假:

      

     1 void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
     2 {
     3     // TODO: Add your message handler code here and/or call default
     4     CClientDC dc(this);
     5     if(m_bdraw==TRUE)
     6     {
     7         dc.MoveTo(m_ptOrigin);
     8         dc.LineTo(point);
     9         m_ptOrigin=point;        //    修改线段的起点
    10     }
    11     CView::OnMouseMove(nFlags, point);
    12 }

      

      

      

  • 相关阅读:
    (转)一台服务器安装两个tomcat6 服务的解决方案
    目标的改变
    常用但易忘的sql语句及java程序
    数据可视化工具 Gephi
    R中library和require的区别
    python BeautifulSoup解决中文乱码问题
    【转载】MySQL全文检索笔记
    poj 1011
    Nest,很酷的东西
    H.264开源解码器评测
  • 原文地址:https://www.cnblogs.com/shenshuyang/p/2980162.html
Copyright © 2020-2023  润新知