BDH_Modify クラスを用意

BDH_Modify クラスを用意しました.
 class BDH_Modify {
 public:
   BDH_Modify () { Modified = FALSE ; }
 public:
  virtual BOOL IsModified (void) const { return Modified ; }
  virtual BOOL SetModifiedFlag (const BOOL mod=TRUE) { Modified = mod ; return TRUE ; }
  virtual BOOL CanClose (void) { return SaveModified() ; }
 public:
  virtual CString GetPathName (void) const { return _T(“ファイル”) ; }
  virtual BOOL DoFileSave (void) { return FALSE ; }
 public:
  virtual BOOL SaveModified (void) ;
 protected:
  BOOL Modified ;
  } ;

 inline
 BOOL BDH_Modify::SaveModified (void)
 {
  if (!IsModified()) { return TRUE ; }
  CString name = GetPathName() ;
  if (name.Find(‘\\’) >= 0) {
   name = ::GetFileName(name) ;
   }
  // VC98\MFC\SRC\DocCore.cpp CDocument::SaveModified() より
  CString prompt ;
  AfxFormatString1(prompt,AFX_IDP_ASK_TO_SAVE,name) ;
  switch (AfxMessageBox(prompt,MB_YESNOCANCEL,AFX_IDP_ASK_TO_SAVE)) {
   case IDCANCEL: return FALSE ; break ;
   case IDYES : if (!DoFileSave()) { return FALSE ; } break ;
   case IDNO : break ;
   default : break ;
   }
   return TRUE ;
  }

ダイアログベースなどで利用するために作成しました.
以下の様に利用しています.
 #include “BDH_Mod.hxx”
 class BDModCSV : public BDocCSV , public BDH_Modify {
 public:
  virtual BOOL Clear (void) { SetModifiedFlag(FALSE) ; return BDocCSV::Clear() ; }
 public:
  virtual void Serialize (CArchive& ar) { SetModifiedFlag(FALSE) ; BDocCSV::Serialize(ar) ; }
  } ;

 class Masters : public BDModCSV
 {
  // …
  virtual CString GetPathName (void) const { return GetFilePath() ; }
  virtual BOOL DoFileSave (void) { return FileWrite(GetFilePath()) ; }
  } ;

 BOOL Masters::AddMaster1 (Master* reg)
 {
  SetModifiedFlag(TRUE) ;
  // …
  }

 void CEditCNDlg::OnCancel()
 {
  Masters* masters = Mast_S->GetSelected() ;
  if (masters != NULL && !masters->CanClose()) { return ; }
  CDialog::OnCancel();
  }



  にほんブログ村 IT技術ブログへ


    • ここの前半にあるコードがほぼ全てです.
      MFC の CDocument を利用できない時のために,その一部の機能の「保存確認」を BDH_Modify として抜き出しています.
      利用方法はその下になります.
      通常,BDH_Modify の GetPathName と DoFileSave はオーバーライドします.


コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください