ZAP.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // zap.h : declaration of the CZap class.  This class handles zapping the files
  2. //          of a project off of which we're basing the generated custom
  3. //          AppWizard The files are zapped into templates used by the generated
  4. //          custom AppWizard.  Class and file names from the original project
  5. //          are "macroized" so that the generated custom AppWizard will create
  6. //          new projects with class and file names derived from the new
  7. //          projects' names, rather than from the original project's name.
  8. //
  9. // Copyright (c) 1985-1998, Microsoft Corporation. All rights reserved.
  10. //
  11. #ifndef __ZAP_H__
  12. #define __ZAP_H__
  13. // Each ZRDRootType represents a string derived from the original project
  14. //  name.
  15. #define NUM_ROOT_TYPES 10
  16. enum ZRDRootType
  17. {
  18. ZRD_ROOT,
  19. ZRD_ROOT_UPR,
  20. ZRD_SAFE_ROOT,
  21. ZRD_CLASS,
  22. ZRD_FILEBASE,
  23. ZRD_DOC,
  24. ZRD_DOC_UPR,
  25. ZRD_MAC_TYPE,
  26. ZRD_R_FILE,
  27. ZRD_R_FILE_UPR,
  28. };
  29. // Each instance of this structure contains a recipe for matching one
  30. //  string in the original project, and replacing it with a string
  31. //  to be put in the generated custom AppWizard's templates.
  32. struct ZapRawData
  33. {
  34. // Strings composing item to match
  35. LPCTSTR lpszPre;
  36. ZRDRootType nRootType;
  37. LPCTSTR lpszPost;
  38. // Strings to replace it with
  39. LPCTSTR lpszReplace[2];
  40. };
  41. class OutputStream;
  42. // There is only one CZap instantiated at a time.  It corresponds to the
  43. //  project off of which we're basing the custom AppWizard.  It's capable of
  44. //  macroizing ("zapping") individual filenames (ZapFileName) and
  45. //  template-izing ("zapping") entire files (ZapFile).
  46. class CZap
  47. {
  48. public:
  49. CZap()
  50. { m_hFile = NULL; m_hMapping = NULL; m_pStrMatches = NULL; m_bBinary = FALSE; m_posTplName = NULL; }
  51. ~CZap();
  52. void DefineGeneratedNewprojInfMacro()
  53. { DefineStringMacro(_T("GENERATED_NEWPROJ_INF_FILES"), m_strGeneratedNewProjInfo); }
  54. LPCTSTR LoadFile(LPCTSTR lpszResource, DWORD& dwSize);
  55. void ZapFile(LPCTSTR lpszInput, DWORD dwSize, OutputStream* pOutput);
  56. void ZapFileName(LPCTSTR lpszFileName, CString& rStrZappedFile, int iReplace = 0);
  57. void UnloadFile();
  58. void SetRoot(LPCTSTR lpszDir, LPCTSTR lpszRoot);
  59. protected:
  60. void InitMatches();
  61. void FreeMatches();
  62. void ZapLine(CString& strLine, int iReplace = 0);
  63. void AddToNewProjInf();
  64. BOOL m_bBinary;             // Is the file we've loaded binary?
  65. HANDLE m_hFile;             // Handle to file we're currently zapping
  66. HANDLE m_hMapping;          // Handle to memory-mapping of that file
  67. LPCTSTR m_lpszFile;         // Pointer to view of file mapped to memory
  68. CString m_strRoot;          // Remembers name of project; used for matching
  69. //  strings to replace
  70. POSITION m_posTplName;      // Current POSITION in the TemplateNames CStringList.
  71. CString m_strRootDir;       // Remembers root directory of original project;
  72. //  used to preserve nesting from original project
  73. //  files to projects generated by the custom
  74. //  AppWizard we're generating
  75. CString m_strSubdir;        // Nesting level of file we're currently zapping.
  76. CString m_strFile;          // Name of file we're currently zapping
  77. CString m_strBaseFileName;  // Base name (no path/ext) of that file
  78. CString m_strFileExt;       // Extension of that file
  79. CString m_strGeneratedNewProjInfo;  // Value to set "GENERATED_NEWPROJ_INF_FILES"
  80. //  macro to.
  81. CString* m_pStrMatches;     // Array of strings to search for when zapping a
  82. //  file.  The entries correspond 1-to-1 with
  83. //  entries of the zrdGeneral[] array defined
  84. //  in zap.cpp
  85. };
  86. #endif //__ZAP_H__