by イグトランス » 2005年5月30日(月) 19:08
現在のStep 11の保存は実質的に名前をつけて保存になっています。
なのでこれを名前をつけて保存にして、新たに上書き保存の実現を図ることになります。
上書き保存はファイルを開いている状態であればそこへ書き出し、そうでなければ名前をつけて保存と同じ挙動をします。(どんなソフトもこういう挙動をしています)
例えばファイルハンドルをグローバル変数にする方法があります。
開くを選んだときにCreateFile()でファイルを開き、中身を読み込んだ後にCloseHandle()を呼ばず、そのグローバル変数へハンドルをしまいます。
上書き保存時にはこれに何かハンドルが入っていればファイルが開かれていると判断することにして、上書き保存ではそのハンドルへ書き出します。
ハンドルがNULLなどであった場合はファイルが開かれていないということなので名前をつけて保存のイベントの関数を呼び出すようにすれば良いでしょう。
そして名前をつけて保存のときやプログラムが終了するときにはグローバル変数のハンドルが有効かどうかを判断し、有効なハンドルであればCloseHandle()を呼ぶようにすれば完璧でしょう。
現在のStep 11の保存は実質的に名前をつけて保存になっています。
なのでこれを名前をつけて保存にして、新たに上書き保存の実現を図ることになります。
上書き保存はファイルを開いている状態であればそこへ書き出し、そうでなければ名前をつけて保存と同じ挙動をします。(どんなソフトもこういう挙動をしています)
例えばファイルハンドルをグローバル変数にする方法があります。
開くを選んだときにCreateFile()でファイルを開き、中身を読み込んだ後にCloseHandle()を呼ばず、そのグローバル変数へハンドルをしまいます。
上書き保存時にはこれに何かハンドルが入っていればファイルが開かれていると判断することにして、上書き保存ではそのハンドルへ書き出します。
ハンドルがNULLなどであった場合はファイルが開かれていないということなので名前をつけて保存のイベントの関数を呼び出すようにすれば良いでしょう。
そして名前をつけて保存のときやプログラムが終了するときにはグローバル変数のハンドルが有効かどうかを判断し、有効なハンドルであればCloseHandle()を呼ぶようにすれば完璧でしょう。