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

MFC MDI 子窗口最小化恢復後界面未刷新的解決方法

     編輯:程式設計綜合問答

問題現象

包含 CDockablePane 嵌入 CMFCToolbar 的 MDI 子窗口,最小化後恢復,工具欄區域出現白塊或殘留圖像,未正確重繪。

原因分析

CDockablePane 在 OnSize 中調整了工具欄佈局,但未處理 WM_PAINT 消息,導致非客戶區或客戶區背景未重繪。

解決方案

在 CToolboxPane 中重寫 OnPaint(或 OnDraw),調用基類繪製並確保工具欄重繪:

void CToolboxPane::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // 調用基類默認繪製(包含背景、邊框)
    CDockablePane::OnPaint();
    // 強制工具欄重繪
    if (m_toolbar.GetSafeHwnd())
    {
        m_toolbar.RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);
    }
}

或在 OnSize 末尾添加 RedrawWindow() 觸發立即重繪。

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