Я пишу приложение для рабочего стола Win7 и хочу, чтобы он плавно переходил из оконного в оконный полноэкранный (и наоборот) и в основном выполнял это, позвонив SetWindowLongPtr, чтобы обновить его стиль, а затем MoveWindow, чтобы обновить его размер и положение. Проблема в том, что окно мигает для одного кадра, чтобы показать его обновленный стиль, но новый размер и позиция не отображаются. Следующий кадр выглядит корректно, но я стараюсь избегать этого однокадрового артефакта.Как я могу обновить стиль и положение HWND атомарно?
Я попытался изменить порядок, в котором я называю API, но он просто изменяет внешний вид артефакта. Я также пытался скрывать окно, вызывая API, а затем показываю окно, но это просто заставляет окно исчезать для одного кадра.
Я знаю, что один из вариантов заключается в создании нового окна с желаемыми свойствами, а затем уничтожении старого, но я хотел найти менее дорогую альтернативу.
Так можно ли назвать эти API и визуально отобразить их атомарно? В качестве бонуса было бы неплохо также иметь множественные результирующие сообщения WM_SIZE, объединенные в одно событие, но я могу управлять этим сам в обработчике сообщений.
Самый точный ответ, хотя я не мог получить ничего, что было бы без артефактов на нескольких машинах, в том числе с использованием подхода RedrawWindow. – MooseBoys