myedpprj.cpp

来自「一个完整的编辑器的代码(很值得参考」· C++ 代码 · 共 109 行

CPP
109
字号

#include "stdafx.h"
#include "editcmd.h"
#include "resource.h"
#include "myedpprj.h"
#include "msdspprj.h"
#include "filesup.h"
	
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma warning ( disable : 4711 )
/////////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNAMIC (CMyEdpProject, CProject)

CMyEdpProject::CMyEdpProject ()
  {
  }

bool CMyEdpProject::Open (LPCTSTR pszPath)
  {
    if (CMsDspProject::OpenDsp (this, NULL, pszPath, _T ("")))
      {
        sPath = pszPath;
        return true;
      }
    return false;
  }

bool CMyEdpProject::Save (LPCTSTR pszPath)
  {
    if (SaveEdp (this, pszPath))
      {
        sPath = pszPath;
        g_pProject->SetModified (FALSE);
        return true;
      }
    return false;
  }

#define BEGIN_PROJECT _T ("# Begin Project")
#define BEGIN_GROUP _T ("# Begin Group")
#define BEGIN_FILE _T ("# Begin Source File")
#define END_PROJECT _T ("# End Project")
#define END_GROUP _T ("# End Group")
#define END_FILE _T ("# End Source File")
#define SOURCE _T ("SOURCE=")
#define EOLN _T ("\n")

bool CMyEdpProject::SaveEdpItem (CProject *pProject, CProjectItem *pParent, FILE *fp)
  {
    if (pParent->dwType & PI_GROUP)
      if (pParent->dwType & PI_ROOT)
        _fputts ((BEGIN_GROUP _T (" \"")) + pParent->sMidPath + pParent->sPath + (_T ("\"") EOLN), fp);
      else
        _fputts ((BEGIN_GROUP _T (" \"")) + pParent->sPath + (_T ("\"") EOLN), fp);
    else
      {
        _fputts (BEGIN_FILE EOLN, fp);
        CString sEntry = pParent->sMidPath + pParent->sPath,
          sPath = GetPath (pProject->sPath, TRUE);
        int nLength = sPath.GetLength ();
        if (!_tcsnicmp (sPath, sEntry, nLength))
          sEntry = sEntry.Mid (nLength);
        _fputts (SOURCE + sEntry + EOLN, fp);
      }
    POSITION pos = pParent->lstItems.GetHeadPosition ();
    CProjectItem *pItem;
    while (pos)
      {
        pItem = pParent->lstItems.GetNext (pos);
        SaveEdpItem (pProject, pItem, fp);
      }
    if (pParent->dwType & PI_GROUP)
      _fputts (END_GROUP EOLN, fp);
    else
      _fputts (END_FILE EOLN, fp);
    return true;
  }

bool CMyEdpProject::SaveEdp (CProject *pProject, LPCTSTR pszPath)
  {
    CWaitCursor wait;

    FILE *fp = _tfopen (pszPath, _T ("wt"));
    if (!fp)
      return false;

    _fputts (BEGIN_PROJECT EOLN, fp);
    POSITION pos = pProject->lstItems.GetHeadPosition ();
    CProjectItem *pItem;
    while (pos)
      {
        pItem = pProject->lstItems.GetNext (pos);
        if (pItem->dwType & PI_ROOT)
          SaveEdpItem (pProject, pItem, fp);
      }
    _fputts (END_PROJECT EOLN, fp);
    fclose (fp);
    return true;
  }

/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?