CWindowPositionManager

http://toshi.my.land.to/table/cwindowpositionmanager/
* トップ ページ - プログラムのテーブル - CWindowPositionManager :: 概要 / コード / メソッド / 解説

概要

終了時にウィンドウの位置を保存して次回起動時に復元する。
日常的に使うアプリケーションではこのような機能は必須ですね。
INI ファイルに保存する形でこの機能を実現するクラスです。

コード

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
Class CWindowPositionManager

Public

    Sub Load(FileName As BytePtr,WindowName As BytePtr,WP As *WINDOWPLACEMENT)
        WP->length=SizeOf(WINDOWPLACEMENT)
        WP->rcNormalPosition.left=GetPrivateProfileInt(WindowName,"Left",100,FileName)
        WP->rcNormalPosition.top=GetPrivateProfileInt(WindowName,"Top",100,FileName)
        WP->rcNormalPosition.right=GetPrivateProfileInt(WindowName,"Right",640,FileName)
        WP->rcNormalPosition.bottom=GetPrivateProfileInt(WindowName,"Bottom",480,FileName)
        If GetPrivateProfileInt(WindowName,"ShowCommand",SW_SHOW,FileName)=SW_SHOWMAXIMIZED Then
            WP->showCmd=SW_SHOWMAXIMIZED
        Else
            WP->showCmd=SW_SHOW
        End If
    End Sub

    Sub Save(FileName As BytePtr,WindowName As BytePtr,WP As *WINDOWPLACEMENT)
        Dim Write[255] As Byte
        wsprintf(Write,"%i",WP->rcNormalPosition.left)
        WritePrivateProfileString(WindowName,"Left",Write,FileName)
        wsprintf(Write,"%i",WP->rcNormalPosition.top)
        WritePrivateProfileString(WindowName,"Top",Write,FileName)
        wsprintf(Write,"%i",WP->rcNormalPosition.right)
        WritePrivateProfileString(WindowName,"Right",Write,FileName)
        wsprintf(Write,"%i",WP->rcNormalPosition.bottom)
        WritePrivateProfileString(WindowName,"Bottom",Write,FileName)
        wsprintf(Write,"%i",WP->showCmd)
        WritePrivateProfileString(WindowName,"ShowCommand",Write,FileName)
    End Sub

End Class

メソッド

Load
指定された INI ファイルから値を読み込み、WINDOWPLACEMENT 構造体にセットします。

引数

FileName As BytePtr
読み込む INI ファイルのパスを指定します。
絶対パスを指定しなかった場合は、Windows のフォルダからファイルを検索します。

WindowName As BytePtr
ウィンドウの名前を指定します。
この名前は読み込む INI ファイルの特定のセクションの名前となり、
INI ファイルに於ける一意の識別子です。

WP As *WINDOWPLACEMENT
セットする WINDOWPLACEMENT 構造体へのポインタを指定します。

Save
WINDOWPLACEMENT 構造体の値を、指定された INI ファイルへ書き込みます。

引数

FileName As BytePtr
書き込む INI ファイルのパスを指定します。
絶対パスを指定しなかった場合は、Windows のフォルダからファイルを検索します。

WindowName As BytePtr
ウィンドウの名前を指定します。
この名前は書き込む INI ファイルの特定のセクションの名前となり、
INI ファイルに於ける一意の識別子です。

WP As *WINDOWPLACEMENT
値を書き込む WINDOWPLACEMENT 構造体へのポインタを指定します。

解説

メソッドを呼び出す側で適宜 GetWindowPlacement / SetWindowPlacement API を
呼び出してください。メソッド内で呼び出すことはしていません。

WindowName の扱いには注意してください。1 つのウィンドウの位置を保存する場合は、
Load メソッドと Save メソッドで同一の文字列へのポインタを渡すだけです。
複数のウィンドウの位置を保存する場合は、ウィンドウ毎に別々の名前を決め、
Load メソッドと Save メソッドでそれぞれの名前になっている
同一の文字列へのポインタを渡してください。
名前を間違えると正しく読み込み、書き込みが出来ません。

ページの先頭へ戻る
プログラムのテーブルへ戻る
トップ ページへ戻る

* トップ ページ - プログラムのテーブル - CWindowPositionManager :: 概要 / コード / 解説
http://toshi.my.land.to/table/cwindowpositionmanager/
(C) 2005 - 2010 Toshi, All Rights Reserved.