分配内存???

dzq 2000-09-11 09:56:00
在用GDI的CRect和CBrush时,我想响应OnTimer()而使屏幕不断的重绘,形成动画,但这时会有严重的屏幕闪烁,请问是否应该分配一下内存??如是,如何分配?感谢回答。
...全文
215 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dlf 2000-09-13
  • 打赏
  • 举报
回复
如果要实现画一个变大的矩形这种简单的绘图,用SetROP2设置绘图模式为R2_NOTXORPEN
对上一次的矩形重画来擦除,再重画就行了。
C???view::OnTimer(...)
{
int iOldMode = m_pClientDC->SetROP2(R2_NOTXORPEN);
rcBorder//上一次画的矩形
m_pClientDC->Rectangle(&rcBorder);
rcBorder.//增大,成为本次画的,
m_pClientDC->Rectangle(&rcBorder);
m_pClientDC->SetROP2(iOldMode);
}
如果要实现比较复杂的动画就的用内存dc了。如Holly所说,灵活变通就行了。
Holly 2000-09-13
  • 打赏
  • 举报
回复
另外,如果要提高显示速度,参见我对另外一个帖子的答复《2、VC中如何预先在内存显示直线、文字等》
Holly 2000-09-13
  • 打赏
  • 举报
回复

响应C???View的WM_ERASEBKGND消息,去掉CView::OnEraseBkgnd(pDC)的调用,直接返回TRUE;

OnDraw代码示例:
//采用100*100的MemDC,根据你的实际情况调整;
void C???View::OnDraw(CDC* pDC)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);

CBitmap bmpDC;
bmpDC.CreateCompatibleBitmap(pDC, 100, 100);
memDC.SelectObject(&bmpDC);
//你的绘制代码
DrawMyGraph(&memDC);

pDC->BitBlt(0, 0, 100, 100, &memDC, 0, 0, SRCCOPY);
bmpDC.DeleteObject();
memDC.DeleteDC();
}

void C???View::DrawMyGraph(CDC* pDC)
{
// 你的绘制代码,大小可变是你另外的控制,这里不提供!
memDC.Rectangle(10, 10, 60, 60);
}
dzq 2000-09-12
  • 打赏
  • 举报
回复
我试了,为什么还是闪烁??,真是对不起,我还不是十分清楚你们的意思,能真正的举个例子吗?
例如,我相画一个不断变大的矩形,每一次响应重绘时不闪烁怎么办???
U皮特U 2000-09-11
  • 打赏
  • 举报
回复
首先创建内存DC:
CClientDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);

然后在memDC中进行你需要的绘制工作

绘制完成后用
dc.BitBlt(x, y, nWidth, nHeight, &memDC, xSrc, ySrc, SRCCOPY);将内存DC中已绘制好的内容拷贝到屏幕DC中。
这种方法效率相当高,不会形成屏幕闪烁。试试看。
Holly 2000-09-11
  • 打赏
  • 举报
回复
你的问题不是是否分配内存,而是要用内存DC,有关内存DC的使用已经有太多的帖子,最近的是〈2、VC中如何预先在内存显示直线、文字等〉!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧