The reason that cause CListCtrl unpainted is because WM_PAINT message routing.
CListCtrl will first get WM_PAINT and repaints itself, and then CTabCtrl, CDialog;
which means while CTabCtrl repaints itself, CListCtrl will be covered.
Since CListCtrl is already repainted, then we cannot see CListCtrl displayed on the screen correctly.
The way to reproduce this sceanrio is:
1. Put focus on CListCtrl
2. Make it repaint.
Just put whatever you have in your tab control ahead of the tab control itself in the tab order of the dialog. Like if the tab order number of the tab control is 10, all the control in it should be below 10 ( 1 - 9 ).
CPaintDC dc(this); // device context for painting
m_ListFigure.Invalidate(TRUE); // THIS IS A BUG WORKAROUND!!! of microsoft bug: wrong repaint order
// Do not call CDialog::OnPaint() for painting messages