首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC CSplitterWnd 拖動調整大小後右側出現殘留豎線的重繪修復

     編輯:程式設計疑難解答

現象

拖動分割條調整子視圖大小後,右側視圖邊緣殘留垂直線條(舊邊界未擦除)。

根因

右側視圖 OnDraw 未正確處理客戶區重繪,導致舊邊界像素殘留。MFC 分割窗口調整大小時會發送 WM_SIZE,視圖需在 OnSize 中觸發完整重繪。

修復方案

方案一: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);
}

方案二:OnDraw 確保填滿客戶區


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),徹底解決殘留線條。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved