Я решил свою проблему, и решение может решить и вашу. Моя проблема заключалась в том, что, хотя я вызывал SetWindowPlacement (& wndpl) в CMainFrame :: OnCreate, окно не было должным образом восстановлено, если оно было развернуто. Я добавил две строки кода перед SetWindowPlacement, и теперь он работает как положено.
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
// Obtain wndpl, maybe from registry
AfxGetApp()->m_nCmdShow = wndpl.showCmd;
wndpl.showCmd = SW_SHOW;
SetWindowPlacement(&wndpl);
}
Эти две строки помогают базовому коду не портить вещи при вызове ActivateFrame, который вызывает ShowWindow с параметром, полученным из CWinApp :: m_nCmdShow.