|
|
|
2-2-8. ウィンドウの位置とサイズの記憶アプリケーションでは、終了時にウィンドウを位置とサイズを覚えておき、次ぎに起動した時に、その位置に表示することは良くあります。普通は記憶はレジストリに書き込みます。そして、SetWindowPlacement,GetWindowPlacement 関数でウィンドウ状態の設定や取得を行ないます。レジストリとは Windows 3.1 の頃は、アプリケーションごとに、INIファイルをユーザが用意します。そしてそれに必要な情報を書き込むことで、電源を落としても再現できます。WIN32からレジストリと言う、システムが用意したデータベースに書き込むのが普通の方法です。レジストリは、ツリー状の構造になっており、キーに色々な形式のデータを格納できます。格納する場所はほぼ決まっています。
ウィンドウの位置とサイズの記憶と復帰のコード例
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
: (他のコード)
if (!RegisterClassEx(&wc)) return FALSE;
ReadRegistry();
hAccel = LoadAccelerators(hInstance,S.szAppName);
S.hWndMain = CreateWindow(pClassName,NULL,
WS_OVERLAPPEDWINDOW,
S.rcWin.left, S.rcWin.top,
S.rcWin.right,S.rcWin.bottom,
NULL,NULL,hInstance,NULL);
: (他のコード)
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg
,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
: (他のコード)
case WM_CLOSE:
{
WriteRegistry();
break;
}
: (他のコード)
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
//
// レジストリ関係の処理
//
static TCHAR szAppKey[] = "Software\\Arcpit\\ApMake";
static LPSTR KeyName[] = {
"Position", // Binary RECT rcWin sizeof(RECT)
};
static HKEY OpenRegistry(LPSTR lpszSubKey)
{
TCHAR szBuf[128];
HKEY hKey;
// /HKEY_CURRENT_USER/Software/Arcpit/ApMake/
|