• GreenOpenPaint的实现(三)添加标尺


    标尺对于图像处理程序,特别是需要精确测量的程序来说意义很大。这里进行了专门的研究。

    基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
    1、添加放大缩小
    void CGreenOpenPaintDoc::ScaleFactorZoomIn(void)
    {
        if (m_fScaleFactor < ZOOM_MAX)
        {
            m_fScaleFactor = m_fScaleFactor*2;
        } 
    }
     
     
    void CGreenOpenPaintDoc::ScaleFactorZoomOut(void)
    {
        if (m_fScaleFactor > ZOOM_MIN)
        {
            m_fScaleFactor = m_fScaleFactor /2;
        } 
    }
    2、在view中添加添加warpper 
    void CGreenOpenPaintView::OnUpdate(CViewpSenderLPARAM lHintCObjectpHint)
    {
        SetScrollSizes(MM_TEXT,
            CSize(int(m_pDoc->m_image.Width()*m_pDoc->m_fScaleFactor),
            int(m_pDoc->m_image.Height()*m_pDoc->m_fScaleFactor)));
        UpdateRulersInfo(RW_POSITIONGetScrollPosition());
        Invalidate();
    }
     
    void CGreenOpenPaintView::UpdateRulersInfo(int nMessageCPoint ScrollPosCPoint Pos)
    {
        if (!m_pParent)
            return;
     
        CSize  m_ImageSize = CSize(m_pDoc->m_image.Width(),m_pDoc->m_image.Height());
        stRULER_INFO pRulerInfo;
        pRulerInfo.uMessage    = nMessage;
        pRulerInfo.ScrollPos   = ScrollPos;
        pRulerInfo.Pos         = Pos;
        pRulerInfo.DocSize     = m_ImageSize;
        pRulerInfo.fZoomFactor = m_pDoc  ->m_fScaleFactor;
        m_pParent->UpdateRulersInfo(pRulerInfo);
    }
    3、mainframe中添加warpper 
    void CMainFrame::UpdateRulersInfo(stRULER_INFO stRulerInfo)
    {
        m_Rulers.UpdateRulersInfo(stRulerInfo);
    }
     
     
    void CMainFrame::ShowRulers(bool bShow)
    {
        m_Rulers.ShowRulers(bShow);
    }
    注意要把m_ruler添入
    private:
        CRulerSplitterWnd m_Rulers;
    4、重写mainframe 的 oncreateclient事件
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContextpContext)
    {
        if (!m_Rulers.CreateRulers(thispContext)) {
            TRACE("rulers创建失败 ");
            return CFrameWnd::OnCreateClient(lpcspContext);
        }
        return TRUE;    
    }
    这个时候标尺出现,只不过由于没有指示量纲,所以没有画刻度
    p.s 注意这个时候,一定要在view创建的时候进行scroll尺度的初始化,否则会assert错误
      CGreenOpenPaintView::CGreenOpenPaintView()
        : m_pParent(NULL)
        , m_pDoc(NULL)
    {
        // TODO: 在此处添加构造代码
        CSize sizeTotal;
        sizeTotal.cx = sizeTotal.cy = 100;
        SetScrollSizes(MM_TEXTsizeTotal);
    }
     
    当导入图片的时候,出现真实标尺。这里是按照厘米这个量纲进行计算的。


    代码

    http://files.cnblogs.com/files/jsxyhelu/GreenOpenPaint2.rar



  • 相关阅读:
    将后台返回的 xml replace
    程序员数学的重要性
    .net里生成的 checkboxlist 至少要选择一个
    关于如何坚持目标,网上偶然看到的,转载一下
    犹豫不决(收集)
    CSS中Padding参数说明及使用指南
    IE地址栏小图标问题
    常用sql语句集锦
    ie9怎么开兼容模式
    一台MySql服务器不同数据库之间数据同步_解决方案(Java)
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/6353619.html
Copyright © 2020-2023  润新知