最近在做东西
想写一个功能完整的view
包括
1.缩放
2.视图位置平移
3.scroll
总之就是类似于acad的这种可以自由观察的view
郁闷中
用了双缓存技术防止闪烁
但是发现不知道应当如何设置mapmode
视图的平移缩放也有问题
求教各位大侠PS试用的是MFC 的 SDI框架
谢谢了。求灵感

解决方案 »

  1.   

    步骤:
    1、首先你创建一个基于SCrollView的单文档工程。
    2、为"打开"菜单编辑,给它定义支持显示图像的类型。
    3、编写缩放,图像居左、居右、居中代码(网上有源代码,可以下载到);参考demo:
    CxImage-------->http://www.codeproject.com/bitmap/cximage.asp
    下载一个源代码下来看,这是个非常优秀的图像处理类库,几乎所有的图像格式都能支持。
      

  2.   

    恶,其实我的意思就是做一个简单的View
    作为图形平台
    就像AutoCAD这种的
    现在要搭出一个框架,然后实现视图缩放、平移就行了这个是我的参考代码
    这段代码用来通过滚轮实现缩放,不过,好像总归觉得缩放的时候视图很不听话
    而且,没有用双缓存的技术,导致闪烁很厉害
    引入了双缓存之后,就不缩放了
    不过发现不行唉....
    BOOL CMyView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
    {
    // TODO: Add your message handler code here and/or call default
    m_nScale += zDelta/120;
    if ( m_nScale < 0 )
    {
    m_nScale = 0;
    }
    if ( m_nScale > 9 )
    {
    m_nScale = 9;
    }
    CDC* pDC;
    pDC = GetWindowDC();

    SetDrawMode(pDC);

    Invalidate();

    return CView::OnMouseWheel(nFlags, zDelta, pt);
    }int CMyView::SetDrawMode(CDC *pDC)
    {
    CRect rect;
    GetClientRect(&rect);

    CSize size(rect.Width(),rect.Height());

    pDC->SetMapMode(MM_ANISOTROPIC);
    int nSize = max(size.cx, size.cy);

    pDC->SetWindowExt(nSize,nSize);
    pDC->SetViewportExt(nSize*fScale[m_nScale], -nSize*fScale[m_nScale]);
    pDC->SetViewportOrg(min(size.cx, size.cy)/20,min(size.cx, size.cy)/20*19);

    return 1;
    }fScale[m_nScale], 是一个固定的缩放倍数的数组
    m_nSize是一个成员变量
    对于SetMapMode()函数感觉用起来既不得心也不应手
    郁闷中求教...
    最好有示例代码,一个View的框架平移的函数自己也写过,就是鼠标左键可以实现拖动View,但是总觉得怪怪的,屏幕上面随便画一个园,因为一平移之后再缩放屏幕上东西就找不到了....