#Win32プログラミング講座の「テキストエディッタを作る」では上書き保存と名前をつけて保存がないですね。
まず上書き保存といっても新規作成した後,また名前をつけて保存を行っていない場合は名前をつけて保存のダイアログが出てくるのが一般的です。
そうでない場合,当たり前ですが上書き保存では現在開いているファイル名で保存します。
この挙動を実現するにはファイルを開いたときにファイル名をグローバル変数に取っておけばよいでしょう。
その変数の中身が空なら名前をつけて保存と言うことにします。
また実際にファイルを保存する処理は名前をつけて保存と同じですから1つの関数にします。
上書き保存のメニューIDをIDM_SAVEに,名前をつけて保存はIDM_SAVEASとします。
また保存の処理の中ではエディットボックスにEM_SETMODIFYを送っていますが,
これは保存したことをエディットボックスに伝えるためです。
試しにコメントアウトして試してみると違いが出るのではないでしょうか?
コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim FileName As String
コード: 全て選択
Sub MainWnd_IDM_SAVE_MenuClick()
If Len(FileName) = 0 Then
MainWnd_IDM_SAVEAS_MenuClick() '名前をつけて保存
Else
FileSave(StrPtr(FiliName))
EndIf
End Sub
Sub FileSave(pFileName As *Byte)
Dim hFile As HANDLE
hFile = CreateFile(pFileName, GENERIC_WRITE, 0,
ByVal 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
If hFile = INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,"ファイルオープンに失敗しました。", "TextEditor", MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
Dim Text As String
Dim Length As Long
Length = GetDlgItemTextStr(hMainWnd, EditBox1, Text)
Dim WrittenBytes As DWord
WriteFile(hFile, StrPtr(Text), Length, VarPtr(WrittenBytes), ByVal 0)
CloseHandle(hFile)
SendDlgItemMessage(hMainWnd, EditBox1, EM_SETMODIFY, FALSE, 0)
End Sub
ファイルを開くときにはFileNameへファイル名を入れて置いてください。