zoukankan      html  css  js  c++  java
  • GreenOpenPaint的实现(五)矩形框

    想显示一副图片相对来说比较容易。但是想在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模式,自己控制这里的转换。





  • 相关阅读:
    ajax收藏
    excel提取文本格式时分秒中数字的方法并计算成秒的公式
    vi编辑模式中按方向键变ABCD的解决方法
    IIS配置Url重写实现http自动跳转https的重定向方法
    IIS中启用目录浏览功能后不能下载未知扩展名文件的解决方法
    Nginx禁止IP访问,只允许域名访问
    nginx在Window平台http自动跳转https设置方法
    通过清理注册表方式清理window远程连接的历史记录
    DOS批处理添加IP域名,备份与恢复
    windows修改snmp端口号方法
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/6354341.html
Copyright © 2011-2022 走看看