MFCでは、保存動作のカスタマイズ用の関数として、
virtual BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName);
が用意されています。
MFCが自動的に保存ダイアログを表示(するか、開いたときのファイル名を使用)して、ファイル名が確定された後に、呼び出されますので、これだけでは、あまり凝ったことは出来ません。
このほかに、
virtual BOOL CDocument::DoFileSave();
virtual BOOL CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace);
をオーバーライドすることが出来ます。
DoFileSave()は、「保存」コマンドが押されたときの動作をカスタマイズ出来ます。
「保存」ボタンでは常に新しいファイル名を自動生成して保存する、、、などの処理を実装したい場合は、ここにその処理を書き込んで、DoSave()に渡します。
また、DoSave()では、ファイル名(lpszPathName)としてNULLが渡されたときに、保存ダイアログを表示しています。標準のDoSave()では、ファイル形式などのカスタマイズがしにくく不便なので、ここで書き換えてしまいましょう。
ちなみに、これらのソースは、VisualStudioのインストール先フォルダ以下の「DOCCORE.CPP」というファイルに書かれていますので、一度のぞいてみて下さい。