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

基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
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(CView* pSender, LPARAM lHint, CObject* pHint)
{
    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_POSITION, GetScrollPosition());
    Invalidate();
}
 
void CGreenOpenPaintView::UpdateRulersInfo(int nMessage, CPoint ScrollPos, CPoint 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,CCreateContext* pContext)
{
    if (!m_Rulers.CreateRulers(this, pContext)) {
        TRACE("rulers创建失败\n");
        return CFrameWnd::OnCreateClient(lpcs, pContext);
    }
    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_TEXT, sizeTotal);

}

 
当导入图片的时候,出现真实标尺。这里是按照厘米这个量纲进行计算的。

代码

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

GreenOpenPaint的实现(三)添加标尺的更多相关文章

  1. GZFramwork快速开发框架演练之会员系统(三)添加会员等级管理

    1.设计会员等级表结构 创建语句: from sysobjects where id = object_id('tb_MembersLevel') and type = 'U') drop table ...

  2. WordPress插件制作教程(三): 添加菜单的方法

    上一篇编写了一个简单的插件,让大家对插件的简单制作有个了解,这一篇我们在更深一步,当我们激活插件后后台会显示菜单出来,然后通过单击菜单显示自己定义好的信息.激活之后会在WordPress后台显示一个菜 ...

  3. DHTMLX 前端框架 建立你的一个应用程序教程(三)--添加一个菜单

    菜单的介绍 这篇我们介绍将菜单组建添加到上节中的布局中: 我们不对菜单做任何处理  只是在这里填充作为界面的一部分. 这里我们介绍的是dhtmlxMenu 组件. 这个组件的数据我们可以从XML或者J ...

  4. solr7.7.0搜索引擎使用(三)(添加文件索引)

    众所周知,solr与es的最大区别是,solr可以对pdf,txt,doc等文件生成索引 那我们如何添加文件索引呢? 步骤1.添加core,取名暂且为 coreFile 在bin下执行命令 ./sol ...

  5. BCGcontrolBar(三) 添加表格(Grid)组件

    表格组件和图表组件是BCG的亮点之一 如下图 BCG有众多的表格样式可供选择 下图是插入基本表格组件后的效果 首先在程序中添加 BasicGridCtrl.h BasicGridCtrl.cpp 因为 ...

  6. springmvc项目搭建三-添加前端框架

    这几年前端框架发展可以说非常迅猛了...实际项目中也用到了几个,easyui相对来讲,算是我第一个接触的前端框架了,用的时候感觉很方便,省了很多代码量,一个好的前端框架可以为你省去很多精力在前端布局上 ...

  7. RCP:给GEF编辑器添加网格和标尺。

    网格和标尺效果如上图所示. 添加网格比较简单,也可以自己实现,主要思路是为编辑器添加一个GridLayer.但是还是建议参考eclipse自己的GEF样例来实现. 需要注意两个部分: 1.重写org. ...

  8. MYSQL添加远程用户或允许远程访问三种方法

    添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...

  9. HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法

    HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...

随机推荐

  1. Android 使用GridView以表格的形式显示多张图片

    GridView用于在界面上按行.列分布的方式来显示多个组件(而ListView只是以按行的方式) 课程目标 学会使用GridView制作二维布局界面(行.列分布) 数据源(集合) --> 适配 ...

  2. 小程序 - API 踩坑记录(更新中...)

    API 小程序API结构导览图: 声明: 请尊重博客园原创精神,转载或使用图片请注明: 博主:xing.org1^ 出处:http://www.cnblogs.com/padding1015/

  3. JZOJ.5329【NOIP2017模拟8.22】时间机器

    Description

  4. 【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)

    前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚上我还是坚持打开电脑,分享一些asp.net生命周期的知识, ...

  5. ios ASIHTTPRequest类库简介和使用说明

    官方网站: http://allseeing-i.com/ASIHTTPRequest/ .可以从上面下载到最新源码,以及获取到相关的资料. 使用iOS SDK中的HTTP网络请求API,相当的复杂, ...

  6. shell用curl抓取页面乱码,参考一下2方面(转)

    1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码.乱码:curl www.1ting.com |more乱码:curl -H "Accept-Encoding: gzip&q ...

  7. mycelipse中关于编码的配置

    (1)修改工作空间的编码方式: Window->Preferences->General->Workspace->Text file Encoding在Others里选择需要的 ...

  8. SQL中distinct的用法(转载)

    1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 ...

  9. vs 2015

    基于应用要求和要使用的语言选择所需工具. Xamarin for Visual Studio:针对所有设备的 C# 中的常用基本代码 Apache Cordova with Visual Studio ...

  10. HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm

    HyperLogLog参考下面这篇blog, http://blog.codinglabs.org/articles/algorithms-for-cardinality-estimation-par ...