社区
界面
帖子详情
$$$双缓冲解决方案
hnzlk
2009-12-18 05:20:03
private:
CBitmap m_bitmap;
CDC m_dcMemory;
m_bitmap的大小即是CListCtrl控件的大小,我想所有绘图操作,我都将画在m_bitmap上,但有个问题,我的CListCtrl控件大小是变化的,是随着父窗口的变化而变化的,在这种情况下,如何实现呢?
...全文
216
32
打赏
收藏
$$$双缓冲解决方案
private: CBitmap m_bitmap; CDC m_dcMemory; m_bitmap的大小即是CListCtrl控件的大小,我想所有绘图操作,我都将画在m_bitmap上,但有个问题,我的CListCtrl控件大小是变化的,是随着父窗口的变化而变化的,在这种情况下,如何实现呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
32 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hnzlk
2009-12-23
打赏
举报
回复
我知道,我已经实现了拖拽,但你看windows缩略图拖动的时候,鼠标处的那张图是透明的。
xpbhere
2009-12-23
打赏
举报
回复
上面的iconList是一个CImageList对象
aoyihuashao
2009-12-23
打赏
举报
回复
MARK。
等有空花一个周末的时间研究双缓存。
xpbhere
2009-12-23
打赏
举报
回复
在开始拖拽的时候调用类似的代码
CPoint pt(0, 0);
iconList.BeginDrag ( 0, pt );
iconList.DragEnter ( /*拖拽窗体的指针*/, /*绘制的点*/);
至于什么时候可以出发开始拖拽
链接里面的文章已经讲得很清楚了。
BeginDrag和DragEnter楼主如果不明白可以查阅MSDN
hnzlk
2009-12-23
打赏
举报
回复
[Quote=引用 26 楼 xpbhere 的回复:]
楼主可以查询一些关于窗口双缓冲绘制的资料看看,如果是完全自绘的话可能实现起来麻烦,但难度不高~
MFC提供的界面不好看,现在很多软件基本都是自绘的。
关于拖拽
http://surmountyu.blog.hexun.com/23221392_d.html
里面讲得很详细
[/Quote]
那上面讲的是功能,我不需要那样的功能。我需要的是效果。我是将CBitmap选入DC,然后在DC上面绘的。
xpbhere
2009-12-23
打赏
举报
回复
楼主可以查询一些关于窗口双缓冲绘制的资料看看,如果是完全自绘的话可能实现起来麻烦,但难度不高~
MFC提供的界面不好看,现在很多软件基本都是自绘的。
关于拖拽
http://surmountyu.blog.hexun.com/23221392_d.html
里面讲得很详细
M_S_D_N
2009-12-23
打赏
举报
回复
那就得DC来配合了,楼主这里用DC吗?是那个m_dcMemory?
[Quote=引用 24 楼 xpbhere 的回复:]
引用 22 楼 m_s_d_n 的回复:
1. CBitmap的宽高改变很麻烦,是绕的;
2. API不提供对CBitmap(HBITMAP)直接绘制操作接口;
3. 自行提供绘制操作,也不容易操作CBitmap,还得先取得HBITMAP中的BITMAP结构,然后再操作。
楼主这种方式,已经接近DirectUI方式。
取得里面的BITMAP结构然后呢?难道要一个字节一个字节地往里面去填数据还是干嘛?
windows提供了窗体的设备上下文(DC)供我们绘制窗体。想做什么绘制直接往上面画就可以了~
CBitmap对象被DC选入后对DC的所有绘制都会体现到这个CBitmap对象里面。
[/Quote]
xpbhere
2009-12-23
打赏
举报
回复
[Quote=引用 22 楼 m_s_d_n 的回复:]
1. CBitmap的宽高改变很麻烦,是绕的;
2. API不提供对CBitmap(HBITMAP)直接绘制操作接口;
3. 自行提供绘制操作,也不容易操作CBitmap,还得先取得HBITMAP中的BITMAP结构,然后再操作。
楼主这种方式,已经接近DirectUI方式。
[/Quote]
取得里面的BITMAP结构然后呢?难道要一个字节一个字节地往里面去填数据还是干嘛?
windows提供了窗体的设备上下文(DC)供我们绘制窗体。想做什么绘制直接往上面画就可以了~
CBitmap对象被DC选入后对DC的所有绘制都会体现到这个CBitmap对象里面。
hnzlk
2009-12-23
打赏
举报
回复
唉,不这么做的话,那个拖动缩略图透明的地方,不好做。以前用imagelist的CreateDragImage
BeginDrag DragEnter DragLeave来做。
M_S_D_N
2009-12-23
打赏
举报
回复
1. CBitmap的宽高改变很麻烦,是绕的;
2. API不提供对CBitmap(HBITMAP)直接绘制操作接口;
3. 自行提供绘制操作,也不容易操作CBitmap,还得先取得HBITMAP中的BITMAP结构,然后再操作。
楼主这种方式,已经接近DirectUI方式。
[Quote=引用 21 楼 xpbhere 的回复:]
引用 19 楼 m_s_d_n 的回复:
这种情况下不应该用CBitmap类创建画板对象。
引用 17 楼 hnzlk 的回复:
是啊
CBitmap是用来存储当前绘制的数据啊,有什么问题?那应该用什么?
[/Quote]
xpbhere
2009-12-23
打赏
举报
回复
[Quote=引用 19 楼 m_s_d_n 的回复:]
这种情况下不应该用CBitmap类创建画板对象。
引用 17 楼 hnzlk 的回复:
是啊
[/Quote]
CBitmap是用来存储当前绘制的数据啊,有什么问题?那应该用什么?
hnzlk
2009-12-23
打赏
举报
回复
[Quote=引用 18 楼 xpbhere 的回复:]
引用 8 楼 cdpc0202 的回复:
要什么解决方案?
你怎么做的?遇到什么问题了?
m_bitmap的大小不是你控制的吗?
list多大你就创建多大的不就可以了?
全都是自己控制,你想怎么画就怎么画啊。
如果想实现类似于windows缩略图的功能,建议没个图都要做一个数据块来保存,不管是gdi对象还是gdi+对象都可以。
然后每次改变大小的时候重新计算每个图的区域并往上贴图。
如果是把所有的图片都绘制到一个CBitmap对象上,那随着listctrl的大小改变,这个CBitmap对象还是每次删除并根据当前listctrl大小重新创建好。
还是那句话 想怎么画怎么画
[/Quote]
不仅仅是贴上图这么简单,还要实现很多相关的功能,比如,拖动图片透明显示,有焦点时绘制边框,拖动图片的时候也需要绘制不同的边框,要实现缩略图自适应控件大小。。。。。等等,一系列功能。
M_S_D_N
2009-12-23
打赏
举报
回复
这种情况下不应该用CBitmap类创建画板对象。
[Quote=引用 17 楼 hnzlk 的回复:]
是啊
[/Quote]
xpbhere
2009-12-23
打赏
举报
回复
[Quote=引用 8 楼 cdpc0202 的回复:]
要什么解决方案?
你怎么做的?遇到什么问题了?
m_bitmap的大小不是你控制的吗?
list多大你就创建多大的不就可以了?
[/Quote]
全都是自己控制,你想怎么画就怎么画啊。
如果想实现类似于windows缩略图的功能,建议没个图都要做一个数据块来保存,不管是gdi对象还是gdi+对象都可以。
然后每次改变大小的时候重新计算每个图的区域并往上贴图。
如果是把所有的图片都绘制到一个CBitmap对象上,那随着listctrl的大小改变,这个CBitmap对象还是每次删除并根据当前listctrl大小重新创建好。
还是那句话 想怎么画怎么画
hnzlk
2009-12-23
打赏
举报
回复
是啊
M_S_D_N
2009-12-23
打赏
举报
回复
那就是说不是继承于MFC的CListCtrl咯?
[Quote=引用 15 楼 hnzlk 的回复:]
不是,就是想用实现类似windows的缩略图功能,可能拖动,而且是透明的。想全部绘到m_bitmap上面,而且clistctrl的大小是随时会改变的,而且缩略图的大小也会跟着变。
[/Quote]
hnzlk
2009-12-23
打赏
举报
回复
不是,就是想用实现类似windows的缩略图功能,可能拖动,而且是透明的。想全部绘到m_bitmap上面,而且clistctrl的大小是随时会改变的,而且缩略图的大小也会跟着变。
M_S_D_N
2009-12-23
打赏
举报
回复
没看明白帖子意思。。。
莫非楼主想在m_bitmap上自绘listctrl?
hnzlk
2009-12-23
打赏
举报
回复
顶,
hnzlk
2009-12-23
打赏
举报
回复
顶。
加载更多回复(12)
15年经验资深架构师详解微软物联网
解决方案
微软在云计算时代完成华丽转型,并且在人工智能、物联网、大数据等领域持续发力。本次课程将目光投向物联网领域,向您全面介绍微软端到端的物联网
解决方案
如何帮助传统企业实现数字化转型,内容涵盖微软物联网平台整体介绍,如何安全快速的实现海量设备的接入管理,以及如何通过设备孪生实现设备全生命周期管理等,此外还将进行客户精彩案例的分享。
单缓冲与
双缓冲
单缓冲 单缓冲即在发送进程与接收进程之间只有一个缓冲区,这是操作系统提供的最简单的一种缓冲形式,如图所示。 发送者向缓冲区发送数据后,接收者可从缓冲区中取出该数据。这种方法有一个明显的缺点,即发送者和接收者不能并行工作。因为缓冲区是临界资源,不能同时对它进行读/写。由于只有一个缓冲区,发送者只有等到接收者将数据取走后,才能再往缓冲区中送数据,否则会覆盖掉原有数据。而接收者也只有等发送者输入数据才能取走,否则会重复取出同一数据(假设缓冲区中事先已有数据)。如果发送者和接收者速度不匹配,将会浪费大量的等待时间
winform的
双缓冲
搜搜winform的
双缓冲
,就会发现网络上有很多文章,乱七八糟说的不明不白。第一种方案: SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleB...
双缓冲
技术讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 首先要搞清楚计算机运行原理,计算机载运行时是将将最大的任务分解成多个任务,然后一个接一个地执行。
mfc下实现
双缓冲
的方法
本帖解决的问题: 如何实现
双缓冲
? 为什么实现了
双缓冲
还是会闪烁? 以下资料为本人积累和加上自己的经验 1、简介一下windows mfc的view显示刷新过程: (1)、使用背景刷填充view窗体(调用内在机制的);(2)、调用OnPain()\OnDraw(调用用户的); 2、产生闪烁的原因出在于:当我们很快地刷新view时,都要执行以
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章