private:
CBitmap m_bitmap;
CDC m_dcMemory;m_bitmap的大小即是CListCtrl控件的大小,我想所有绘图操作,我都将画在m_bitmap上,但有个问题,我的CListCtrl控件大小是变化的,是随着父窗口的变化而变化的,在这种情况下,如何实现呢?

解决方案 »

  1.   


    拉伸贴图不行,有个功能是这样的,比如在m_dcMemory中画一张图片,这个图片会随着控件大变化而变化。
      

  2.   

    CRect rect;
    GetDlgItem(IDC_STATIC)->GetWindowRect(rect);
    得到绘图区域的大小然后把rect传到绘图函数中 就ok了。记得刷新窗口。
      

  3.   

    CListCtrl控件变化后获得它的大小,再在上面绘图就行了
      

  4.   

    我的CBitmap m_bitmap; 不只是在一个函数中使用的。我要想要不同的函数中绘制内容到同一个m_bitmap中。
      

  5.   

    最有弹性的做法就是拉伸,不拉伸的话,就只好每次画的时候都更新你的内存图片大小,然后1:1地render
      

  6.   

    recreate...需要更新大小时先bitblt到temp,然后deleteobject后recreate再把temp bitblt回去.
      

  7.   

    要什么解决方案?
    你怎么做的?遇到什么问题了?
    m_bitmap的大小不是你控制的吗?
    list多大你就创建多大的不就可以了?
      

  8.   

    如果可以把LISTCTRL画到一个规定尺寸,然后贴到m_bitmap中,然后清除-再重画
      

  9.   

    没看明白帖子意思
    莫非楼主想在m_bitmap上自绘listctrl?
      

  10.   

    不是,就是想用实现类似windows的缩略图功能,可能拖动,而且是透明的。想全部绘到m_bitmap上面,而且clistctrl的大小是随时会改变的,而且缩略图的大小也会跟着变。
      

  11.   

    那就是说不是继承于MFC的CListCtrl咯?
      

  12.   


    全都是自己控制,你想怎么画就怎么画啊。
    如果想实现类似于windows缩略图的功能,建议没个图都要做一个数据块来保存,不管是gdi对象还是gdi+对象都可以。
    然后每次改变大小的时候重新计算每个图的区域并往上贴图。如果是把所有的图片都绘制到一个CBitmap对象上,那随着listctrl的大小改变,这个CBitmap对象还是每次删除并根据当前listctrl大小重新创建好。还是那句话 想怎么画怎么画
      

  13.   

    这种情况下不应该用CBitmap类创建画板对象。
      

  14.   

    CBitmap是用来存储当前绘制的数据啊,有什么问题?那应该用什么?
      

  15.   

    1. CBitmap的宽高改变很麻烦,是绕的;
    2. API不提供对CBitmap(HBITMAP)直接绘制操作接口;
    3. 自行提供绘制操作,也不容易操作CBitmap,还得先取得HBITMAP中的BITMAP结构,然后再操作。楼主这种方式,已经接近DirectUI方式。
      

  16.   

    唉,不这么做的话,那个拖动缩略图透明的地方,不好做。以前用imagelist的CreateDragImage
    BeginDrag   DragEnter  DragLeave来做。
      

  17.   


    取得里面的BITMAP结构然后呢?难道要一个字节一个字节地往里面去填数据还是干嘛?
    windows提供了窗体的设备上下文(DC)供我们绘制窗体。想做什么绘制直接往上面画就可以了~
    CBitmap对象被DC选入后对DC的所有绘制都会体现到这个CBitmap对象里面。
      

  18.   

    那就得DC来配合了,楼主这里用DC吗?是那个m_dcMemory?
      

  19.   

    楼主可以查询一些关于窗口双缓冲绘制的资料看看,如果是完全自绘的话可能实现起来麻烦,但难度不高~
    MFC提供的界面不好看,现在很多软件基本都是自绘的。关于拖拽
    http://surmountyu.blog.hexun.com/23221392_d.html
    里面讲得很详细
      

  20.   

    那上面讲的是功能,我不需要那样的功能。我需要的是效果。我是将CBitmap选入DC,然后在DC上面绘的。
      

  21.   

    在开始拖拽的时候调用类似的代码
    CPoint pt(0, 0);
    iconList.BeginDrag ( 0, pt );
                    iconList.DragEnter ( /*拖拽窗体的指针*/, /*绘制的点*/);
    至于什么时候可以出发开始拖拽链接里面的文章已经讲得很清楚了。BeginDrag和DragEnter楼主如果不明白可以查阅MSDN
      

  22.   

    MARK。
    等有空花一个周末的时间研究双缓存。
      

  23.   

    上面的iconList是一个CImageList对象
      

  24.   

    我知道,我已经实现了拖拽,但你看windows缩略图拖动的时候,鼠标处的那张图是透明的。