画圆时的刷新问题(欢迎大家进来讨论)

tatuotuo1 2009-05-05 08:23:26
这个可以实现画圆的刷新吗?画圆怎么刷新呀?请大家来讨论下

void CTestView::OnDraw(CDC* pDC)
{
int i,j,k,l;
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CDC *dc = GetDC();
CBrush brushBack;//背景画刷
brushBack.CreateSolidBrush(RGB(255,255,255)) ;//创建白色画刷

//获得客户区矩形
CRect rectClient;
GetClientRect(rectClient);

CBrush temp(HS_BDIAGONAL,RGB(0,0,255));
dc->SelectObject(temp);
for(int a=0;a<100;a++)
{
dc->FillRect(rectClient, &brushBack) ;//填充客户区
dc->Ellipse(i,j,k,l);
i++;
k++;
Sleep(10);
Invalidate();
}
i=0;
k=100;
}
...全文
110 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tatuotuo1 2009-05-06
  • 打赏
  • 举报
回复
继续,哪有关于这方面知识的介绍呀
dengxuxing 2009-05-06
  • 打赏
  • 举报
回复
6楼的说的很对,Invalidate(); 不能放在OnDraw 、OnPaint函数中的。
huqinglu123 2009-05-06
  • 打赏
  • 举报
回复
在我的记忆中OnDraw是不用调用
UpdateWindow,Invalidate()函数的
它本身就有重绘功能,
UpdateWindow,Invalidate()的作用是在没有重绘功能的函数里,调用它们来强制重绘窗口...
test4ever 2009-05-06
  • 打赏
  • 举报
回复
MSDN
zhangyan_wt 2009-05-05
  • 打赏
  • 举报
回复
画圆的刷新是什么意思,想做动画么?

这段代码有这样几个问题
1)i,j,k,l 没赋初值,怎么可能有效果。
2)这里有白色覆盖整个背景,没必要Invalidate(),在OnDraw里调用Invalidate()感觉怪怪的。
3)dc都已经给你了,没必要重新GetDC()

修改后的代码如下

void CTestView::OnDraw(CDC* pDC)
{
int i,j,k,l;
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBrush brushBack;//背景画刷
brushBack.CreateSolidBrush(RGB(255,255,255)) ;//创建白色画刷

//获得客户区矩形
CRect rectClient;
GetClientRect(rectClient);


CBrush temp(HS_BDIAGONAL,RGB(0,0,255));
pDC->SelectObject(temp);
i=0;
k=100;
j = 0;
l =100;
for(int a=0;a<100;a++)
{
pDC->FillRect(rectClient, &brushBack) ;//填充客户区
pDC->Ellipse(i,j,k,l);
i++;
k++;
Sleep(10);
}
}

gxhzippo 2009-05-05
  • 打赏
  • 举报
回复
Invalidate();
  • 打赏
  • 举报
回复
Invalidate
genushuang 2009-05-05
  • 打赏
  • 举报
回复
刷新函数Invalidate()不是有参数的吗??比如NULL
biweilun 2009-05-05
  • 打赏
  • 举报
回复
刷新不行吗?UpdateWindow看看,立刻重绘

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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