zoukankan      html  css  js  c++  java
  • 第11章 图形的保存和重绘

    参考: https://blog.csdn.net/u014162133/article/details/46573873

    1.    创建4个菜单,为其添加消息响应,用成员变量保存绘画类型。添加LButtonDown和LButtonUp消息。

    2.   当窗口重绘时,如果想再显示原先画的数据,则需要保存数据。为此创建一个新类来记录绘画类型和两个点。

    class CGraph 

    {

    public:

    CPoint m_ptOrigin;//起点

    CPoint m_ptEnd;//终点

    UINT m_nDrawType;//绘画类型

    CGraph();

    CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);//此为构造函数。

    virtual ~CGraph();

    };

    然后在void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)中加入如下代码

    //CGraph graph(m_nDrawType,m_ptOrigin,point);//不能用局部变量

    //m_ptrArray.Add(&graph);//加入这种指针数组中

    /* OnPrepareDC(&dc);//这个函数中可以重新设置窗口原点,对于滚动条中,保存数据前要调用此函数

    dc.DPtoLP(&m_ptOrigin);//将设备坐标转换为逻辑坐标

    dc.DPtoLP(&point);//

    CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);//在堆中创建新的对象

    m_ptrArray.Add(pGraph);*///加入到指针数组中

    在GraphicView.h中有如下代码

    CPtrArray m_ptrArray;

    //在OnDraw中重画时调出数据

    for(int i=0;i<m_ptrArray.GetSize();i++)

    3.    在CView::OnPaint()调用了OnDraw(),但在void CGraphicView::OnPaint()中MFC的Wizard没有调用OnDraw(),要注意这个区别。如果你此时想调用,必须手动添加代码。 OnDraw(&dc);

    4.    让窗口具有滚动条的功能。

       第1.将CGraphicView的头文件中的CView全部替换成CSrollView

       第2.添加如下的代码

    void CGraphicView::OnInitialUpdate()

    {

    CScrollView::OnInitialUpdate();

    // TOD Add your specialized code here and/or call the base class

    SetScrollSizes(MM_TEXT,CSize(800,600));//设置映射模式,设定窗口大小。OK!

    }

    5.    坐标系的转换,此处不再详细介绍,需要时请查阅相关资料。

    6.    解决重绘时线跑到上面的问题。为什么会错位?因为逻辑坐标和设备坐标没有对应起来。解决方法:

    在OnLButtonDown画完图后,保存之前。调用

    /* OnPrepareDC(&dc);//重新设置逻辑坐标的原点!!!

    dc.DPtoLP(&m_ptOrigin);//设备坐标转化为逻辑坐标

    dc.DPtoLP(&point);

    CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);

    m_ptrArray.Add(pGraph);*/

    7.    另外两种方法来保存数据。一种是用CMetaFileDC,另一种是利用兼容DC,重绘时利用 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcCompatible,0,0,SRCCOPY);将兼容DC的图拷贝到屏幕DC上去。

  • 相关阅读:
    ireport制作小技巧
    Spring 自动装配 Bean
    Toad创建DBLINKsop
    Spring 读书笔记-----使用Spring容器(一)
    Spring读书笔记-----Spring的Bean之Bean的基本概念
    关于iOS开发中info.plist文件的解读
    iOS常用的第三方库GitHub地址
    NSUserDefault的使用
    论坛收集
    iOS开发的一些奇巧淫技
  • 原文地址:https://www.cnblogs.com/happykoukou/p/9319281.html
Copyright © 2011-2022 走看看