![]()
今回は終了時にウインドウの位置やサイズを保存し、起動時にその位置やサイズをみ込むことで前回閉じた位置に前回のままの大きさで開く処理を実装する。情報の保存はレジストリに行う。
ウインドウの位置やサイズの取得/復元は以前に「ウインドウの位置情報を保存/復元するクラス」で作成したCDnpWindowPlacementクラスを利用する。
まずこのクラスを利用するために「DnpWindowPlacement.h」ファイルをプロジェクトに追加する。Visual Studio 2008で「プロジェクト」メニューから「既存の項目を追加」を選択する。このメニュー項目がない場合はソリューションウインドウを開いてからもういちどメニューを選択する。

そして現われたウインドウで「DnpWindowPlacement.h」を追加する。
※このファイルは今回のサンプルプロジェクトもしくは「ウインドウの位置情報を保存/復元するクラス」からダウンロードしてください
#define DNP_REGKEY _T("software\\dinop\\tabbrowser") //■追加
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
CMessageLoop theLoop;
_Module.AddMessageLoop(&theLoop);
CMainFrame wndMain;
if(wndMain.CreateEx() == NULL)
{
ATLTRACE(_T("メイン ウィンドウの作成に失敗しました!\n"));
return 0;
}
//wndMain.ShowWindow(nCmdShow); //■削除
//■追加
//ウインドウサイズ/位置をレジストリから復元
{
bool ret;
CDnpWindowPlacement cPlacement;
ret = cPlacement.LoadFromReg(HKEY_CURRENT_USER,DNP_REGKEY,_T("WindowPlacement"));
if(ret)
ret = cPlacement.Restore(wndMain);
if(ret == false)
wndMain.ShowWindow(nCmdShow);
}
int nRet = theLoop.Run();
_Module.RemoveMessageLoop();
return nRet;
}
#include "DnpWindowPlacement.h" //■追加
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
//■追加
//現在のウインドウサイズ/位置をレジストリに保存
{
CDnpWindowPlacement cPlacement;
cPlacement.GetCurrentPos(m_hWnd);
cPlacement.SaveToReg(HKEY_CURRENT_USER,DNP_REGKEY,_T("WindowPlacement"));
}
_cTabImageList.Destroy();
// メッセージ フィルターおよび画面更新用のオブジェクト登録解除
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
bHandled = FALSE;
return 1;
}
![]()
これでビルド/実行すると前回の位置に同じ大きさでタブブラウザが開くようになった。
次回はステータスバーにIEコントロールからのメッセージを表示する機能を追加する。
