OnSize()
→ 窗口無效化 (InvalidateRect)
→ 發送 WM_PAINT
→ CWnd::OnPaint()
→ CPaintDC dc(this) // 自動 BeginPaint/EndPaint
→ OnPrepareDC(&dc)
→ OnDraw(&dc) // 視圖類虛函數,實際繪圖邏輯在這裡
❌ OnSize → OnDraw → OnPaint(順序錯誤,OnDraw 是 OnPaint 內部調用)
✅ OnSize → WM_PAINT → OnPaint → OnDraw
| 函數 | 所屬類 | 職責 |
|---|---|---|
| OnSize | CWnd | 響應尺寸變化,調整佈局、滾動條、子窗口位置 |
| OnPaint | CWnd | 處理 WM_PAINT,構造 CPaintDC,調用 OnDraw |
| OnDraw | CView | 核心繪圖邏輯,由框架在繪圖上下文中調用 |
OnSize 中調整滾動範圍:SetScrollSizes(MM_TEXT, totalSize)。pDC->GetClipBox 實現增量更新。Invalidate() 或 RedrawWindow(),不要直接調用 OnDraw。