実行ごとに場所を保存したい正しく記述されたWindowsアプリは、GetWindowPlacement()
シャットダウンする前に結果を保存し、SetWindowPlacement()
起動時に使用して位置を復元します。
多くの場合、アプリは使いやすいように結果をGetWindowPlacement()
レジストリに保存しREG_BINARY
ます。
このWINDOWPLACEMENT
ルートには、他の方法に比べて多くの利点があります。
- 前回の実行以降に画面の解像度が変更された場合を処理します。
SetWindowPlacement()
ウィンドウが完全に画面外になっていないことを自動的に確認します
- 状態(最小化/最大化)を保存しますが、復元された(通常の)サイズと位置も保存します
- デスクトップメトリックを正しく処理し、タスクバーの位置などを補正します(つまり、「画面座標」の代わりに「ワークスペース座標」を使用します。画面座標の保存に依存する手法では、ウィンドウが常に表示される「ウォーキングウィンドウ」の問題が発生する可能性があります。ユーザーが画面の上部にツールバーを持っている場合は、毎回少し低くなります)。
nCmdShow
最後に、ウィンドウの復元を適切に処理するプログラムは、シェルから渡されたパラメーターを考慮に入れます。このパラメーターは、アプリケーションを起動するショートカット(Normal、Minimized、Maximize)で設定されます。
if(nCmdShow != SW_SHOWNORMAL)
placement.showCmd = nCmdShow; //allow shortcut to override
Win32以外のアプリケーションの場合、ウィンドウ位置の保存/復元に使用しているメソッドが最終的に同じ基になる呼び出しを使用することを確認することが重要です。そうしないと、(Java SwingのsetBounds()
/getBounds()
問題のように)多くの余分なコードを記述してしまうことになります。関数にすでに存在する機能を再実装しWINDOWPLACEMENT
ます。