Fix: Online-host list column-toggle leaves ghost artifact after last column
CListCtrlEx::OnEraseBkgnd (with m_bSkipEraseBkgnd) only erases the empty area below the last item, not the horizontal strip right of the last column (the ~20px scrollbar reserve AdjustColumnWidths always leaves). Changing the column count via SetColumnVisible/ToggleColumnVisibility redistributed widths but never repainted with background erase, so stale pixels from the previous last column lingered next to the new one (e.g. after "TLS") until a tab switch or minimize/restore forced a full redraw. Mirror the proven OnSize needRefresh path: temporarily lift the skip-erase flag and issue a full RedrawWindow with RDW_ERASE|RDW_INVALIDATE|RDW_ALLCHILDREN|RDW_UPDATENOW after each visibility change. Co-Authored-By: deepseek-v4-pro
This commit is contained in:
1 parent
a447452521
commit
c85039ea0a
1 file changed
+8
@@ -160,6 +160,9 @@ void CListCtrlEx::SetColumnVisible(int nCol, BOOL bVisible)
|
|||||||
if (m_Columns[nCol].CanHide || bVisible) { // 不允许隐藏的列只能设为可见
|
if (m_Columns[nCol].CanHide || bVisible) { // 不允许隐藏的列只能设为可见
|
||||||
m_Columns[nCol].Visible = bVisible;
|
m_Columns[nCol].Visible = bVisible;
|
||||||
AdjustColumnWidths();
|
AdjustColumnWidths();
|
||||||
|
// 列数变化后完整重绘(含背景擦除),否则最后一列右侧会残留旧列残影。
|
||||||
|
ScopedEraseBkgnd scope(*this);
|
||||||
|
RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -230,6 +233,11 @@ void CListCtrlEx::ToggleColumnVisibility(int nColumn)
|
|||||||
|
|
||||||
// 重新调整列宽
|
// 重新调整列宽
|
||||||
AdjustColumnWidths();
|
AdjustColumnWidths();
|
||||||
|
|
||||||
|
// 列数变化后完整重绘(含背景擦除),否则最后一列(TLS 等)右侧会残留旧列残影。
|
||||||
|
// 与 OnSize 中 needRefresh 分支相同的处理:临时放行背景擦除 + 全量 RedrawWindow。
|
||||||
|
ScopedEraseBkgnd scope(*this);
|
||||||
|
RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CListCtrlEx::LoadColumnVisibility()
|
void CListCtrlEx::LoadColumnVisibility()
|
||||||
|
|||||||
Reference in new issue
Block a user