a是View類的一個int成員,構造函數初始化為。然后添加一個view消息:void CMy123View::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultthis->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 hereCString s;s.Format("%d", a);pDC->TextOut(10, 10, s);}a是View里面的一個成員啊.......構造函數初始化為0!!如果在InInvalidate()后再加一句AfxMessageBox("fdasfdsafas");就可以看見輸出0了,說明AfxMessageBox會調用updatewindow?
2 回答

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
Invalidate只是給View的消息隊列中加入一個WM_PAINT消息,然后立即繼續下面的語句(包括a=10;這句)。View響應WM_PAINT消息調用OnDraw的時機由其消息隊列的處理方式決定,通常會在WM_LBUTTONUP響應結束之后(即OnLButtonUp結束之后)。
如果需要立即重繪,請使用UpdateWindow函數。
補充:
不清楚Windows內部是如何處理AfxMessageBox的。如果你用彈出的消息框擋住了客戶區文字部分,然后關閉消息框,確實有可能調用UpdateWindow。
- 2 回答
- 0 關注
- 130 瀏覽
添加回答
舉報
0/150
提交
取消