社区
界面
帖子详情
双缓存 onpaint
kittymimihh
2010-02-22 04:48:45
1、采用双缓存绘图一定要在ondraw()函数里面吗?能不能在onpaint()函数里面呢?
2、我用了一种算法绘制渐变色,我自己用肉眼都可以看见图形的绘制过程,怎么回事,不是说双缓存可以解决这个问题吗?我绘图的代码是在onpaint()函数里面的。
...全文
242
6
打赏
收藏
双缓存 onpaint
1、采用双缓存绘图一定要在ondraw()函数里面吗?能不能在onpaint()函数里面呢? 2、我用了一种算法绘制渐变色,我自己用肉眼都可以看见图形的绘制过程,怎么回事,不是说双缓存可以解决这个问题吗?我绘图的代码是在onpaint()函数里面的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kittymimihh
2010-02-23
打赏
举报
回复
pDC = new CClientDC(this);
pDC->DeleteDC();
那这样对吗?
但是我如果再加上下面这句就会出错是什么原因呢?
//delete(pDC);为什么一用这句就出错?
cxclz668
2010-02-22
打赏
举报
回复
都可以的 看你怎么用!!用release
gdstcwl
2010-02-22
打赏
举报
回复
CDC *pDC;
pDC = GetDC();
释放用release
gdstcwl
2010-02-22
打赏
举报
回复
onpaint()里也可以做的.
渐变可以考虑在onpaint()里绘图,在定时器里改变渐变的值,然后invalidate一下
kittymimihh
2010-02-22
打赏
举报
回复
void CSK4000Dlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
CRect rect;
this->GetClientRect(&rect);
CDC *pDC = NULL;
pDC = new CClientDC(this);
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
for( int j = 0;j < rect.bottom; j++)
{
for( int i = 0;i < rect.right/2 ; i++)
{
MemDC.FillSolidRect(CRect(i,j,i+1,j+1), RGB(213, 255-MulDiv(j, 255, rect.right )/4,217 ));
}
}
for( int j = 0;j < rect.bottom; j++)
{
for( int i = rect.right;i >= rect.right/2 ; i--)
{
MemDC.FillSolidRect(CRect(i,j,i+1,j+1), RGB(213, 255-MulDiv(j, 255, rect.right )/4,217 ));
}
}
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,rect.right,rect.bottom,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
//delete(pDC);为什么一用这句就出错?
}
我现在有两个问题:一个就是我第一个提的;第二个问题我已经解决了,现在的问题是这些DC的删除。cpaint()里的DC自己会在析构函数里删除,那么我自己定义的Pdc是不是要我自己删除,如果要我自己删除的话,怎么删,我以上做法是对的吗?
sciencstf
2010-02-22
打赏
举报
回复
代码贴一下。。。。。
vc
双
缓存
解决闪烁问题
"vc
双
缓存
解决闪烁问题"这个主题就是针对这一现象提出的一种优化策略,通过使用
双
缓存
技术来减少或消除界面的闪烁现象。
双
缓存
是一种常见的图形用户界面优化技术,其基本原理是将需要绘制的控件或窗口内容先画入...
vc mtc GDI+
双
缓存
画图板
在VC++编程环境中,"vc mtc GDI+
双
缓存
画图板"是一个涉及到图形用户界面(GUI)开发的技术点。这个标题暗示我们将会讨论如何使用Microsoft的多线程类库(MTL,Multithreaded Apartment)以及GDI+图形库来实现一个
双
...
MFC
双
缓存
无闪烁画图
本文将详细讲解如何利用MFC实现
双
缓存
无闪烁画图技术,以及与之相关的知识点。 首先,我们要理解"无闪烁"的概念。在图形用户界面中,当界面元素更新时,如果刷新不及时或者处理不当,用户可能会看到闪烁现象,这...
winform通过
双
缓存
绘画五彩方块
在这种情况下,"winform通过
双
缓存
绘画五彩方块"是一个实用的技术,它可以显著提升图形绘制的效率和质量,避免闪烁和不平滑的现象。 首先,我们要理解什么是
双
缓存
。
双
缓存
是指在内存中创建一个临时的图像缓冲区,...
Delphi
双
缓存
Listview图标自绘代码
为了解决这个问题,我们可以采用
双
缓存
技术来提高Listview的绘制效率。
双
缓存
技术是一种优化UI绘制的方法,其核心思想是先在内存中创建一个与屏幕大小相同的位图,然后在位图上进行所有的绘制操作,最后将完成绘制...
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章