Мой коллега предложил вызвать CWnd :: LockWindowUpdate (), прежде чем я сделаю переключение. Итак, все сводится к следующему:
CRect r;
DWORD dwStyle = WS_CHILD|WS_TABSTOP|WS_VISIBLE;
m_pParent->GetDlgItem(m_nID)->GetWindowRect(&r);
m_pParent->ScreenToClient(r);
m_pParent->LockWindowUpdate();
m_pParent->InvalidateRect(r);
delete m_pCust; // Delete the old custom control
m_pCust = NULL;
::CreateWindowEx(0, "EDIT", "", dwStyle, r.left, r.top, r.Width(), r.Height(), m_pParent->m_hWnd, (HMENU)m_nID, AfxGetInstanceHandle(), NULL);
m_pCust = new CustomCtrl();
pCust->SubclassDlgItem(m_nID, m_pParent);
m_pParent->UnlockWindowUpdate()
Есть немного больше из-за того, что делает мой пользовательский элемент управления. В итоге я вызвал m_pParent-> InvalidateRect (r), чтобы заставить мой элемент управления правильно рисовать в конце.
Также оказывается, что перекрытие элемента управления :: CreateEx произошло потому, что я вызывал UnsubclassDlgItem перед удалением старого пользовательского элемента управления