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

基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
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. 【顽固BUG】Visual Studio 2015 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。

    前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...

  2. poj_2352 线段树

    题目大意 对于二维平面上的n个点,给出点的坐标.定义一个点A覆盖的点的个数为满足以下条件的点B的个数:点B的x <= 点A的x坐标,点B的y坐标 <= 点A的y坐标.     给出N个点的 ...

  3. activemq 实战三 了解连接器的URI-Understanding connector URIs

    Before discussing the details of connectors and their role in the overall ActiveMQ architecture, it’ ...

  4. SASS环境搭建及HBuilder中sass预编译配置

    ---------------------------------Ruby环境安装-------------------------------- 至于为什么要安装ruby环境请移步:https:// ...

  5. 转移wordpress到另一台主机

    做项目的代码是两个人,我想把另一个小伙伴做的转移到自己的linux系统上(主要是linux下一片空白,从头做太浪费时间了) 这个过程其实也可以用来类比从本地到服务器的过程(可能略有不同,真上线的时候会 ...

  6. ScrollView 设置滚动是否可用

    extends:http://stackoverflow.com/questions/5763304/disable-scrollview-programmatically , http://stac ...

  7. angular -- 自定义指令和模板

    angular 可以自定义一些指令,来简化我们前端的工作量. 第一种:简单指令示例: <h3>自定义指令</h3> <sheng></sheng> &l ...

  8. LISTAGG

    LISTAGG(measure_expr [, 'delimiter']) WITHIN GROUP (order_by_clause) [OVER query_partition_clause] S ...

  9. POM(project Object Model) Maven包管理依赖 pom.xml文件

    什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法 ...

  10. IOS微信端软键盘收起后界面按钮失效问题

    问题描述: 1.在vue里封装了一个confirm的弹窗(即如下一个弹窗) 2.发现在IOS微信客户端中打开后,当需要在表单中输入内容的时候,很自然的点击了键盘右上角的[完成]按钮 3.啊~~~,惊人 ...