アプリケーションを開発している場合、アプリケーションのメインウィンドウの位置、サイズを記憶しておいて、次回起動時にも同じ位置、サイズで表示したい場合があります。
ウィンドウの位置情報の取得にはGetWindowPlacementを使用します。これを使用すると、最大化/最小化/通常表示の状態と、通常状態でのウィンドウサイズが一度に取れるので今回の用途には最適だと思います。
ウィンドウの位置情報の設定には、設定/復元したい内容によって、いくつかのAPIを使い分けます。便利なのは SetWindowPosや、ShowWindowだと思います。
CMainFrame::OnClose()かOnDestroyで行います。ダイアログアプリケーションでも同様です。
アプリケーションの作成方法によっていろいろです。以下のような方法があります。
アプリケーションのInitInstanceの最後のあたりで、フレームウィンドウに対するShowWindow()などウィンドウの表示に関する呼び出しがされている場合は、その直前でサイズを設定することができると思います。
ドキュメント/ビューサポートのMFCアプリケーションを作成したときにはドキュメントが作成されるタイミングでウィンドウが表示されてしまうので、ここで行ったばあい一瞬ウィンドウが表示されたのちに指定した表示状態になるという動作になってしまいます。
通常のドキュメント/ビューサポートのMFCアプリケーションを作成した場合、メインフレームのActivateFrameを使用することができます。ActivateFrameはドキュメントが作成されるタイミングでフレームワークから呼び出されます。
この方法で行うときはデフォルトインプリメントの引数に表示状態を渡せばMFC側でうまく設定してくれます。
新規ドキュメントが作成されるたびに呼び出されるファンクションであるため、場合によってはフラグなどを用意しておいて、一度目の呼び出しのみ行われるようにするなど工夫する必要があります。
または、ここでの設定は行わずデフォルトインプリメントのnCmdShowにSW_HIDEを渡しておいて、上記CWinApp::InitInstanceのタイミングで設定するという方法もあります。
ただし、ドキュメントレスのアプリケーションを作成した場合上記タイミングでActivateFrameは呼び出されません。
ダイアログアプリケーションではCDialog::OnInitDialogで行えばよいでしょう。
更新履歴