我想在程序中做一个缩略图的效果:把视图(VIEW)里所显示的内容作为缩略显示在一个控件中,如LISTCTRL里。起初我用的较笨的方法,即用BITBLT拷贝窗口内容的方式。但是这种方法有个致命的弱点,就是当窗口的一部分被其他窗口遮住的时候,被遮住的部分是无法显示的。而且好像效率也不高,因为我想做成像WORD那样,当页面内容有改动的时候,缩略图也相应有体现。
      在网上找了很久,没有什么头绪,讲的最多就是缩略图片,那个方法对我这个程序好像不适用。不知道谁做过类似的功能没有,讲讲思路也好啊。谢谢了先。

解决方案 »

  1.   

    不知 WM_PRINTCLIENT 能否帮上忙
      

  2.   

    VIEW被庶住是没有办法的, 我做复制VIEW图片的时候也是这样.
    唯一办法是:把VIEW的绘制集中到一个函数里,如:Draw(HDC hDC);
    OnPaint的时候调用用这个函数
    缩略的时候也用这个, 然后把图片缩略后使用.
      

  3.   

    先发一个wm_Paint消息过去强制刷新
      

  4.   

    我做过 ,在插入item时设置I_IMAGECALLBACK参数
    再调用LVN_GETDISPINFO消息函数,就可以实现和微软一样的效果了兄弟,多给点分,穷啊
      

  5.   

    To lyg_zy:
       你说的这种方法我曾经也考虑过,但是当视图很多的时候(因为我的这个系统主要是做文档处理的,所有会有很多页,即很多VIEW),那么如你所说的方法视图就会又增一倍,这样会系统的效率是否会有很大影响呢?
      

  6.   

    发一个wm_Paint消息过去强制刷新, 自己组装一个wm_paint消息,发过去
    ???hehe 这个行不??  或者干脆弄成永远在前方显示.
      

  7.   

    要不可以用个带缩放功能的画图控件,有名的mapx
      

  8.   

    多做一个存贮区域哟。比如要显示的图片,做一个内存区域,view 是显示它,你的缩略图也显示它
    就不会出现这问题了。
      

  9.   

    BOOL PrintWindow(
      HWND hwnd,               // Window to copy
      HDC  hdcBlt,             // HDC to print into
      UINT nFlags              // Optional flags
    );
    唯一的问题是,这是xp新增的api
      

  10.   

    回楼主:
        缩略图view永远只有一个。在你切换view的时候,你要切换 缩略图view的文档为你的当前view的文档
    所以我的思路只回增加一个view而已,不绘增加一倍的。 此思路肯定可行,我们的类似Coredraw的软件中的缩略图(或者说叫导航图)就是这样做的。性能如果有问题,是你的绘制太慢,应该优化你的渲染速度。
      

  11.   

    lyg_zy :
        谢谢你的回复,我去试试看。
      

  12.   

    PrintWindow也不能把遮住的部分画出来,遮住的部分只有在再次显示的时候,由系统绘制。WORD那样的缩略效果是由于它读取了整个文档,所以并不是简单的吧视图COPY过去。如果你想做成那样的效果,只有自己去读整个文档,然后缩略。