MFC 绘制折线一直狂闪 invalidate函数是不是用错了?

voidCThreedrawView::OnDraw(CDC*pDC){CThreedrawDoc*pDoc=GetDocument();ASSERT_VALID(pDo... void CThreedrawView::OnDraw(CDC* pDC)
{
CThreedrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (m_PressLine)
{
CPoint pt;
int size;
size=linepts.GetSize();
pDC->MoveTo(linestartpt);
for (int i=0;i<size;i++)
{
pt=(CPoint)linepts.GetAt(i);
pDC->LineTo(pt);
}

Invalidate();

}
}
请问是怎么回事???
展开
 我来答
xx_lyq00
2013-06-27 · TA获得超过4139个赞
知道大有可为答主
回答量:1794
采纳率:88%
帮助的人:803万
展开全部
Invalidate(); 这是就是让系统调用OnDraw()的。

你把Invalidate(); 写在OnDraw()里面,如果一旦OnDraw被调用。就相当于一个死循环。

百科里抄的:
void Invalidate( BOOL bErase = TRUE );
参数: bErase 决定了是否要在WM_PAINT消息前发送WN_ERASEBKGND
该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。

相当于
Invalidate -> OnPaint ->OnDraw
追问
那应该写在哪里??ONDRAWLINE()里吗?可是把这个INVALIDATE注销掉就什么都画不出
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式