博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GreenOpenPaint的实现(五)矩形框
阅读量:6224 次
发布时间:2019-06-21

本文共 1431 字,大约阅读时间需要 4 分钟。

想显示一副图片相对来说比较容易。但是想在SDI中显示一个可以拖拽的矩形框,并且在滚动和缩放下都不变形,是很困难的。

MFC应该说在这个方面提供了强大的支持,但是也有一些是由于历史的原因需要去除的地方,特别是在缩放的这个地方还存在一些问题。
我认为关键是形成知识的框架,这样面对未来的需求就能够灵活应变。
这里,我结合GreenOpenPaint的具体实现进行总结。
我总结了一下,有几点:
1、肯定是要为这个矩形生成专门的类。这个类的实现,需要在DOC中,因为DOC就是用来管理所有的模型的;那么注意,由于DOC统一管理所有模型,所以关于fscalefactor(缩放尺度)等数据都应该直接从DOC中获取。
2、由于采用了滚动,所有的VIEW在向模型中输入坐标的时候都要DPTOLP(Lbuttondown,Lbuttonup,mousemove)
CClientDC dc(this);
    OnPrepareDC(&dc);
    dc.DPtoLP(&point);//转换为逻辑坐标
3、将rectex的draw直接级联到view的draw中去,并传入DC
    m_pDoc->m_Rectangle.Draw(pDC);
4、
OnSetCursor设置
BOOL CGreenOpenPaintView::OnSetCursor(CWndpWndUINT nHitTestUINT message)
{
    switch(m_CurrentCtrlRect)
    {
    case CR_NORTHWEST:
    case CR_SOUTHEAST:
        SetCursor(LoadCursor(NULL,IDC_SIZENWSE));
        break;
    case CR_NORTHEAST:
    case CR_SOUTHWEST:
        SetCursor(LoadCursor(NULL,IDC_SIZENESW));
        break;
    case CR_WEST:
    case CR_EAST:
        SetCursor(LoadCursor(NULL,IDC_SIZEWE));
        break;
    case CR_NORTH:
    case CR_SOUTH:
        SetCursor(LoadCursor(NULL,IDC_SIZENS));
        break;
    default:
        SetCursor(LoadCursor(NULL,IDC_ARROW));
    }
    return FALSE;
}
 
5、关于DPI的思考
void CGreenOpenPaintView::OnPrepareDC(CDCpDCCPrintInfopInfo)
{
    // TODO: 在此添加专用代码和/或调用基类
    CScrollView::OnPrepareDC(pDCpInfo);
    pDC->SetMapMode(MM_TEXT);                     // Set the map mode
    pDC->SetViewportExt(0,0);   
}
实际上,MFC可以设置多种MapMode。但是这里MapMode的选择主要是针对显示区域来说的,也就是如何达到屏幕上去。对于这里的图像本身(也就是扫描仪或摄像机的DPI),相关的还是比较少的。而显示的DPI主要是和RUler相关的。因此,我统一采用MM_TEXT模式,自己控制这里的转换。

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

转载地址:http://lkfna.baihongyu.com/

你可能感兴趣的文章
从入门到求职,成为数据科学家的终极指南
查看>>
聊聊BOM的那些事
查看>>
微软为无服务器架构引入新API管理消费层
查看>>
微服务通信策略
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
Java的序列化特性将要退出历史舞台了
查看>>
2018年最好的45个Vue开源项目汇总
查看>>
Oracle即将发布的全新Java垃圾收集器 ZGC
查看>>
初识Python
查看>>
shell无限循环
查看>>
推荐.Net、C# 逆向反编译四大工具利器
查看>>
nginx 在ubuntu 上的启动,停止,重启
查看>>
安装xen和虚拟机以及解决其中出现的问题
查看>>
数据库常用授权和授权回收参数配置
查看>>
华为交换机组播配置
查看>>
数通手稿留档——Switch
查看>>
linux命令:kernel内核编译、装载模块管理modprobe/screen
查看>>
定期删除mysql的log文件的脚本
查看>>
Linux主机安全加固
查看>>
30分钟配置好-Puppet: 强大的中心化配置管理系统
查看>>