zoukankan      html  css  js  c++  java
  • 第八章 图形编程 笔记

    1. 一个简单的图形程序

    给CExample3View类添加一个成员变量 CPoint m_jumpOffPoint来记录鼠标按下的位置。在构造函数中初始化为0.

    接下来编写OnLButtonDown()和OnLButtonUp()函数 如下

    void CExample3View::OnLButtonDown(UINT nFlags, CPoint point) 
    {
        m_jumpOffPoint = point;     //记录鼠标按下的位置
        
        CView::OnLButtonDown(nFlags, point);
    }
    void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) 
    {
        HDC hdc;
        hdc = ::GetDC(m_hWnd);       //获取设备环境句柄
        MoveToEx(hdc, m_jumpOffPoint.x, m_jumpOffPoint.y, NULL);  //移动到线条的起点
        LineTo(hdc, point.x, point.y);          //画线,从线条的起点到鼠标放开的位置
        ::ReleaseDC(m_hWnd, hdc);    //释放设备环境句柄
        
        CView::OnLButtonUp(nFlags, point);
    }

    2. 设备环境相关类

           2.1 CDC类

    void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) 
    {
        CDC *pDC = GetDC();   HDC是一个句柄,而CDC是MFC提供的绘图类
        pDC->MoveTo(m_jumpOffPoint);
        pDC->LineTo(point);
        ReleaseDC(pDC);
        
        CView::OnLButtonUp(nFlags, point);
    }

    上述代码和SDK全局函数实现的效果一样。

           2.2 CPaintDC类

           CPaintDC以及后面的CClientDC, CWindowDC都是派生自DCD。封装了一些操作,使用完后不需要调用ReleaseDC()。

           CPaintDC对象一般是用在WM_PAINT消息响应函数中,但只有当窗口的客户区部分或全部“无效”而需要“刷新”时需要发送WM_PAINT消息。

           2.3 CClientDC类

           CClientDC类对象只能在窗口的客户区进行图形绘制。

           CClientDC对象构造时采用的是GetDC()函数来获取环境句柄,而不是BeginPaint()函数。

           BeginPaint()函数获取的设备环境是客户区中的无效矩形区,随后的绘图操作只能在该无效矩形区中进行。并且可以自动将无效矩形区变为有效。GetDC()函数获取的设备环境是整个客户区,随后的绘图操作可以在客户区的任意部分进行。但是不能将任何无效矩形区变为有效。

    void CExample3View::OnLButtonUp(UINT nFlags, CPoint point) 
    {
        CClientDC dc(this);
        dc.MoveTo(m_jumpOffPoint);
        dc.LineTo(point);
        
        CView::OnLButtonUp(nFlags, point);
    }

    2.4 CWindowDC类

           CWindowDC可以获得整个窗口的设备句柄,包括客户区和非客户区,也就是说,可以在一个窗体的任何位置进行绘图。

  • 相关阅读:
    python之数据结构汇总
    【JDBC核心】数据库连接池
    【JDBC核心】数据库事务
    【JDBC核心】批量插入
    【JDBC核心】操作 BLOB 类型字段
    【JDBC核心】获取数据库连接
    【JDBC核心】JDBC 概述
    【Java基础】基本语法-程序流程控制
    【Java基础】基本语法-变量与运算符
    【Java基础】Java 语言概述
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/2576717.html
Copyright © 2011-2022 走看看