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

基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
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. php第一例

    参考 例子 https://www.cnblogs.com/chinajins/p/5622342.html 配置多个网站 https://blog.csdn.net/win7system/artic ...

  2. openstack的glance、nova、cinder使用ceph做后端存储

    块设备与 OPENSTACK 通过 libvirt 你可以把 Ceph 块设备用于 OpenStack ,它配置了 QEMU 到 librbd 的接口. Ceph 把块设备映像条带化为对象并分布到集群 ...

  3. AndroidWear开发之下载SDK[Android W/Android L]

    Android L Developer Preview SDK发布了,但是天朝还是无法更新到.打开SDK Manager依旧一成不变,这时候就需要利器了. 第一步: 打开Goagent,不要说不知道什 ...

  4. poj_2315 最小费用最大流

    题目大意 一个图上有N个顶点,从1到N标号,顶点之间存在一些无向边,边有长度,要求从顶点1走到顶点N,再从顶点N走回顶点1,其中不必要经过每个顶点,但是要求走的路径上的边只能经过一次.求出从1---& ...

  5. springboot---->springboot的使用(一)

    这里我们记录一下springboot的使用,第一次创建环境. springboot的使用 项目结构如下: 一.我们使用maven去构建springboot的依赖.其中我们使用的pom.xml文件内容如 ...

  6. LeetCode——Single Number II

    Description: Given an array of integers, every element appears three times except for one. Find that ...

  7. vux报错 this指针问题

    报错: 代码: 结果:取不到this.tishi,不明白为什么在请求内部会取不到这个值. 分析:this可能有问题 解决: 结果: 这样就能取到this.tishi的值了. 总结: methods:{ ...

  8. vue报错一

    8080端口被占用 解决方案: 打开cmd输入:netstat -ano查看所有端口信息,如图,找到端口 8080,以及对应的 PID: 输入:tskill PID 即可杀死进程,ex:: tskil ...

  9. C# MVC跳转

    MVC方式: 显示提示框,并返回上一页 return Content("<script>alert('暂时没有实践作业!');history.go(-1);</script ...

  10. ios 更改全局UINavigationBar的背景图片以及通知栏颜色

    1.更改UINavigationController push 到另一个界面返回按钮的title self.navigationController.navigationBar.topItem.bac ...