拖動分割條調整子視圖大小後,右側視圖邊緣殘留垂直線條(舊邊界未擦除)。
右側視圖 OnDraw 未正確處理客戶區重繪,導致舊邊界像素殘留。MFC 分割窗口調整大小時會發送 WM_SIZE,視圖需在 OnSize 中觸發完整重繪。
void CRightView::OnSize(UINT nType, int cx, int cy) {
CView::OnSize(nType, cx, cy);
// 關鍵:通知客戶區完全無效,觸發 WM_PAINT
Invalidate(TRUE); // TRUE = 擦除背景
// 或
RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);
}
void CRightView::OnDraw(CDC* pDC) {
CRect rect;
GetClientRect(&rect);
// 先填充背景色擦除殘留
pDC->FillSolidRect(&rect, GetSysColor(COLOR_WINDOW));
// 再繪製業務內容
// ...
}
// 在視圖類構造或 PreCreateWindow 中
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 系統默認背景畫刷
框架自動在 WM_ERASEBKGND 中填充,減少手動擦除工作。
組合使用:設置背景畫刷 + OnSize 調用 Invalidate(TRUE),徹底解決殘留線條。