社区
图形处理/算法
帖子详情
vc绘图双缓冲问题
shegu
2008-07-15 11:15:26
请教高手,我想在对话框的pictrue控件上绘图,能在Onpaint()函数中实现双缓冲吗?,如果能,请给出代码,谢谢
...全文
241
9
打赏
收藏
vc绘图双缓冲问题
请教高手,我想在对话框的pictrue控件上绘图,能在Onpaint()函数中实现双缓冲吗?,如果能,请给出代码,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Tinary3v0
2008-07-28
打赏
举报
回复
谢谢楼上两位的提醒,我也学习一下 呵呵 我现在一般都是在其他地方用内存DC的 两位说的情况我还没有涉及到
我再查查
haven_t
2008-07-27
打赏
举报
回复
[Quote=引用 5 楼 Tinary3v0 的回复:]
如果你在Onpaint()函数里面用内存DC那跟不用是一样的。
使用内存DC要在其他的地方用,比如鼠标落下 抬起 移动或其他事件引发界面改动的时候。
你用的Onpaint()函数里面和不用效果是一样的,反倒是增加程序负担了,跟直接调用Invalidate有什么区别啊?
[/Quote]
在某些情况下是有区别的,试想一下如powerpoint的情况下,用户区有多个部分重叠的物件(如图片或文本框),在重绘一个物件时必然要重绘与之相交并在其之上的物件,这个物件也会引起其他相关物件的重绘,这样会引起一系列的链式间接重绘。这种情况下使用内存dc就只需要重绘触发物件及与之直接相关的物件,不需要理会间接的物件,然后使用bitblt复制过去就行了。
sp0000sp
2008-07-25
打赏
举报
回复
用上面的应该可以实现 有问题再说
sp0000sp
2008-07-25
打赏
举报
回复
CPaintDC dc(this); // device context for painting
SwapBuffers(dc.m_ps.hdc);
Tinary3v0
2008-07-25
打赏
举报
回复
如果你在Onpaint()函数里面用内存DC那跟不用是一样的。
使用内存DC要在其他的地方用,比如鼠标落下 抬起 移动或其他事件引发界面改动的时候。
你用的Onpaint()函数里面和不用效果是一样的,反倒是增加程序负担了,跟直接调用Invalidate有什么区别啊?
rocker9527
2008-07-16
打赏
举报
回复
vc6
CDC memDC;
memDC.CreateCompatibleDC(pDC);//pDC为实际的DC.
CRect rcClient;
GetClientRect(rcClient);
CBitmap bm;
bm.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
CBitmap *oldBitmap = memDC.SelectObject(&bm);
......//添加自已绘画内容
pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(oldBitmap);
sunyim
2008-07-16
打赏
举报
回复
先在内存中画,然后显示
yjplus
2008-07-16
打赏
举报
回复
创建内存DC即可
pollychang
2008-07-15
打赏
举报
回复
CGraphics m_graph;
m_graph.BeginDraw(dc.m_hDC);
m_graph.Axes();
m_graph.Grid();
m_graph.Title(m_sTitle);
m_graph.DrawCenterAxes();
int size = m_data.size();
for (int i=0; i<size; i++)
{
m_graph.DrawVector2(m_data[i].x, m_data[i].y, m_iMarkerMode, m_iMarkerSize, m_crMarker);
}
}
m_graph.EndDraw(dc.m_hDC);
// 开始图形绘制
void CGraphics::BeginDraw(HDC hDC)
{
if (m_bPrinting || !m_bMemoryDraw)
{
m_hDC = hDC;
DrawBkGround();
}
else
{
::GetClipBox(hDC, &m_ClipBox);
m_hDC = ::CreateCompatibleDC(hDC);
m_Bitmap = ::CreateCompatibleBitmap(hDC, m_ClipBox.right - m_ClipBox.left,
m_ClipBox.bottom - m_ClipBox.top);
m_OldBitmap = (HBITMAP)::SelectObject(m_hDC, m_Bitmap);
::SetWindowOrgEx(m_hDC, m_ClipBox.left, m_ClipBox.top, NULL);
// 绘制无效区的背景色 CBL2008-06-05
HBRUSH hBrush = ::CreateSolidBrush(m_nBackColor);
HBRUSH hBrold = (HBRUSH)::SelectObject(m_hDC, hBrush);
::FillRect(m_hDC,&m_ClipBox,hBrush);
::SelectObject(m_hDC, hBrold);
::DeleteObject(hBrush);
}
}
// 结束图形绘制
void CGraphics::EndDraw(HDC hDC)
{
if (m_bPrinting || !m_bMemoryDraw)
{
m_bPrinting = false;
return;
}
::BitBlt(hDC, m_ClipBox.left, m_ClipBox.top, m_ClipBox.right - m_ClipBox.left,
m_ClipBox.bottom - m_ClipBox.top, m_hDC, m_ClipBox.left, m_ClipBox.top, SRCCOPY);
::SelectObject(m_hDC, m_OldBitmap);
::DeleteDC(m_hDC);
m_hDC = NULL;
}
VC
关于
双缓冲
绘图
的实现_
vc
++_
VC
双缓冲
技术的解释与说明
VC
双缓冲
技术的解释与说明
基于
VC
的高效
绘图
双缓冲
技术
防止图像更新时产生闪烁,是一篇不错的论文,浅显易懂,值得一看
VC
双缓冲
doc
绘图
vc
双缓冲
doc
绘图
变化的圆圈
vc
双缓冲
doc
绘图
变化的圆圈
vc
双缓冲
doc
绘图
变化的圆圈
VC
双缓冲
实现方法
VC
双缓冲
实现方法,
双缓冲
绘图
,详细代码。
双缓冲
实现彩色画图(
vc
6.0下GDI
绘图
)
(
vc
6.0下GDI
绘图
)
双缓冲
实现彩色画图,c++实现。。。之前的那个只能黑白画图,调试了很久,终于明白,getdc不能保存为全局变量,因为getdc即使在同一个类中得到dc也不一样。。。。代码实现后,能进行彩色
双缓冲
绘制,记住:不要保存getdc的全局变量,没用的,只会引起系统bug
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章