MFC Ondraw与重画的一个问题

a是View类的一个int成员,构造函数初始化为。然后添加一个view消息:voidCMy123View::OnLButtonUp(UINTnFlags,CPointpo... a是View类的一个int成员,构造函数初始化为。
然后添加一个view消息:
void CMy123View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
this->Invalidate();
a = 10;
CView::OnLButtonUp(nFlags, point);
}
然后Ondraw里:
void CMy123View::OnDraw(CDC* pDC)
{
CMy123Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString s;
s.Format("%d", a);
pDC->TextOut(10, 10, s);
}
执行程序,鼠标按客户区一下,为什么显示的是10?Invalidate不是在之前么?
a是View里面的一个成员啊.......构造函数初始化为0!!
非常感谢2L的回答!!

如果在InInvalidate()后再加一句AfxMessageBox("fdasfdsafas");
就可以看见输出0了,说明AfxMessageBox会调用updatewindow?
展开
 我来答
真白的纱雾d442c
2009-12-06 · TA获得超过1093个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:539万
展开全部
Invalidate只是给View的消息队列中加入一个WM_PAINT消息,然后立即继续下面的语句(包括a=10;这句)。View响应WM_PAINT消息调用OnDraw的时机由其消息队列的处理方式决定,通常会在WM_LBUTTONUP响应结束之后(即OnLButtonUp结束之后)。
如果需要立即重绘,请使用UpdateWindow函数。

补充:
不清楚Windows内部是如何处理AfxMessageBox的。如果你用弹出的消息框挡住了客户区文字部分,然后关闭消息框,确实有可能调用UpdateWindow。
tjw408797664
2009-12-06 · TA获得超过1153个赞
知道小有建树答主
回答量:1042
采纳率:0%
帮助的人:704万
展开全部
因为你的a是在函数外部定义的,在鼠标点击之前就已经给它赋值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式