Правильно написані програми Windows, які хочуть зберегти своє місце розташування від запуску до запуску, збережуть результати GetWindowPlacement()
перед вимкненням, а потім використовують SetWindowPlacement()
під час запуску, щоб відновити своє положення.
Часто програми зберігають результати GetWindowPlacement()
реєстру як REG_BINARY
зручні для використання.
WINDOWPLACEMENT
Маршрут має багато переваг по порівнянні з іншими методами:
- Опрацьовує випадок, коли роздільна здатність екрану змінювалася з часу останнього запуску:
SetWindowPlacement()
автоматично гарантує, що вікно не буде повністю поза екраном
- Зберігає стан (мінімізований / максимізований), але також зберігає відновлений (нормальний) розмір і положення
- Правильно обробляє метрики робочого столу, компенсуючи положення панелі завдань тощо (тобто використовує "координати робочої області" замість "координати екрана" - методи, які покладаються на збереження координат екрана, можуть страждати від проблеми "ходьби вікон", де вікно завжди буде відображатися щоразу, коли користувач має панель інструментів у верхній частині екрана).
Нарешті, програми, які правильно обробляють відновлення вікон, враховуватимуть nCmdShow
параметр, переданий із оболонки. Цей параметр встановлюється в ярлику, який запускає програму (Звичайний, Згорнутий, Збільшити):
if(nCmdShow != SW_SHOWNORMAL)
placement.showCmd = nCmdShow; //allow shortcut to override
Для додатків, які не є Win32, важливо бути впевненим, що метод, який ви використовуєте для збереження / відновлення позиції вікна, врешті-решт використовує той самий базовий виклик, інакше (наприклад, Java Swing setBounds()
/ getBounds()
проблема) у підсумку ви напишете багато додаткового коду повторно впровадити функціональність, яка вже є у WINDOWPLACEMENT
функціях.