Максимальное окно восстанавливается до полного экрана

С помощью CWnd::ShowWindow(SW_SHOWMAXIMIZED) максимально увеличивает окно моего приложения, как и ожидалось.

Однако при нажатии кнопки восстановления в приложении (или двойном щелчке по строке заголовка) восстановленный размер совпадает с размером развернутого окна, что вводит пользователя в заблуждение.

Использование этого альтернативного кода имеет ту же проблему:

WINDOWPLACEMENT wndpl;
GetWindowPlacement(&wndpl);
wndpl.showCmd = SW_SHOWMAXIMIZED;
SetWindowPlacement(&wndpl);

Как я могу сохранить размер по умолчанию не максимальный при восстановлении.

2 ответа

Я решил свою проблему, и решение может решить и вашу. Моя проблема заключалась в том, что, хотя я вызывал 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.

Вся информация находится в файле с расширением.RC. Я никогда не использовал процедуры максимизации / восстановления, хотя вы должны искать "DIALOGEX" для того же окна. Вы можете изменить его, используя любой редактор (блокнот, ультраредакт и т. Д.)

Другие вопросы по тегам