PropSheet WizardAw.cpp
上传用户:apjinmao
上传日期:2007-01-02
资源大小:96k
文件大小:6k
源码类别:

PropertySheet

开发平台:

Visual C++

  1. // PropSheet Wizardaw.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "PropSheet Wizard.h"
  5. #include "PropSheet Wizardaw.h"
  6. #include "chooser.h"
  7. #ifdef _PSEUDO_DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. // This is called immediately after the custom AppWizard is loaded.  Initialize
  12. //  the state of the custom AppWizard here.
  13. void CPropSheetWizardAppWiz::InitCustomAppWiz()
  14. {
  15. // Create a new dialog chooser; CDialogChooser's constructor initializes
  16. //  its internal array with pointers to the steps.
  17. m_pChooser = new CDialogChooser;
  18. // Set the maximum number of steps.
  19. SetNumberOfSteps(LAST_DLG);
  20. UndefMacro (_T ("PROJTYPE_MDI"));
  21. UndefMacro (_T ("PROJTYPE_SDI"));
  22. UndefMacro (_T ("PROJTYPE_DLG"));
  23. UndefMacro (_T ("PROJTYPE_DLL"));
  24. UndefMacro (_T ("PROJTYPE_CUSTOMAW"));
  25. }
  26. // This is called just before the custom AppWizard is unloaded.
  27. void CPropSheetWizardAppWiz::ExitCustomAppWiz()
  28. {
  29. // Deallocate memory used for the dialog chooser
  30. ASSERT(m_pChooser != NULL);
  31. delete m_pChooser;
  32. m_pChooser = NULL;
  33. // TODO: Add code here to deallocate resources used by the custom AppWizard
  34. }
  35. // This is called when the user clicks "Create..." on the New Project dialog
  36. //  or "Next" on one of the custom AppWizard's steps.
  37. CAppWizStepDlg* CPropSheetWizardAppWiz::Next(CAppWizStepDlg* pDlg)
  38. {
  39. if (!pDlg)
  40. {
  41. SetRootOptions ();
  42. InitMacros ();
  43. }
  44. // Delegate to the dialog chooser
  45. return m_pChooser->Next (pDlg);
  46. }
  47. // This is called when the user clicks "Back" on one of the custom
  48. //  AppWizard's steps.
  49. CAppWizStepDlg* CPropSheetWizardAppWiz::Back(CAppWizStepDlg* pDlg)
  50. {
  51. // Delegate to the dialog chooser
  52. return m_pChooser->Back(pDlg);
  53. }
  54. void CPropSheetWizardAppWiz::SetRootOptions ()
  55. {
  56. // Set "FILEBASE" macro
  57. CString strFileBase;
  58. m_Dictionary.Lookup (_T("Root"), strFileBase);
  59. DefineStringMacro (_T("filebase"), strFileBase);
  60. DefineStringMacro (_T ("SHEET_TITLE"), strFileBase);
  61. }
  62. void CPropSheetWizardAppWiz::GetPlatforms (CStringList &Platforms)
  63. {
  64. for (POSITION pos = Platforms.GetHeadPosition ();pos;)
  65. {
  66. POSITION posCurr = pos;
  67. CString strPlatform = Platforms.GetNext (pos);
  68. if (strPlatform.Left (5) != _T ("Win32"))
  69. Platforms.RemoveAt (posCurr);
  70. }
  71. }
  72. void CPropSheetWizardAppWiz::InitMacros ()
  73. {
  74. CString root, page, file;
  75. m_Dictionary.Lookup (_T ("Root"), root);
  76. m_Dictionary.Lookup (_T ("Safe_root"), root);
  77. root.SetAt (0, toupper (root[0]));
  78. page = _T ("C") + root + _T ("Page");
  79. DefineStringMacro (_T ("PAGE_CAPTION"), 0, root + _T (" Page"));
  80. DefineStringMacro (_T ("PAGE_CLASS"), 0, page);
  81. DefineStringMacro (_T ("PAGE_FILE"), 0, file = root + _T ("Page"));
  82. file.SetAt (0, tolower (file[0]));
  83. DefineStringMacro (_T ("PAGE_VAR"), 0, _T ("m_") + file);
  84. file.MakeUpper ();
  85. DefineStringMacro (_T ("PAGE_ID"), 0, _T ("IDD_") + file);
  86. DefineStringMacro (_T ("PAGE_BMP"), 0, _T ("IDB_") + file);
  87. DefineStringMacro (_T ("PAGE_FIRST_BMP"), _T ("IDB_") + file);
  88. DefineIntMacro (_T ("PAGE_VAL"), 0, 1000);
  89. DefineIntMacro (_T ("PAGE_ITERATOR"), 0, 1);
  90. DefineIntMacro (_T ("NUM_PAGES"), 1);
  91. DefineIntMacro (_T ("ABOUT_NUM"), 2);
  92. DefineIntMacro (_T ("NUM_CLASSES"), 4);
  93. DefineIntMacro (_T ("NUM_RESOURCES"), 3);
  94. DefineIntMacro (_T ("MAINSHEET_NUM"), 3);
  95. DefineIntMacro (_T ("APP_NUM"), 3);
  96. DefineBoolMacro (_T ("SMALL_PAGE"), FALSE);
  97. DefineBoolMacro (_T ("MEDIUM_PAGE"), TRUE);
  98. DefineBoolMacro (_T ("LARGE_PAGE"), FALSE);
  99. }
  100. // Here we define one instance of the CPropSheetWizardAppWiz class.  You can access
  101. //  m_Dictionary and any other public members of this class through the
  102. //  global PropSheetWizardaw.
  103. CPropSheetWizardAppWiz PropSheetWizardaw;
  104. /////////////////////////////////////////////////////////////////////////////
  105. // Miscellaneous utility functions
  106. // You may find the macro-setting functions useful in your own custom
  107. //  AppWizard.  Simply copy them to your own code, and replace references
  108. //  to "PropSheetWizardaw" to your own CCustomAppWiz-derived class.
  109. // These are generic macro-setting functions.  They set macros or remove
  110. //  them from the dictionary.
  111. void DefineMacro(LPCTSTR lpszKey, LPCTSTR lpszValue)
  112. {
  113. PropSheetWizardaw.m_Dictionary[lpszKey] = lpszValue;
  114. }
  115. void UndefMacro(LPCTSTR lpszKey)
  116. {
  117. PropSheetWizardaw.m_Dictionary.RemoveKey(lpszKey);
  118. }
  119. // These are more specific macro-setting functions.  They set macros
  120. //  depending on the "type", and work correctly in $$BEGINLOOP/$$ENDLOOP
  121. //  blocks.
  122. static void MakeKey(CString& strKey, int iItem)
  123. {
  124. CString strOriginal = strKey;
  125. strKey.Format(_T("%s_%d"), (LPCTSTR) strKey, iItem);
  126. }
  127. void DefineIntMacro(LPCTSTR pszKey, int iValue)
  128. {
  129. CString strValue;
  130. strValue.Format(_T("%d"), iValue);
  131. DefineMacro(pszKey, strValue);
  132. }
  133. void DefineIntMacro(LPCTSTR pszKey, int iItem, int iValue)
  134. {
  135. CString strKey(pszKey);
  136. MakeKey(strKey, iItem);
  137. DefineIntMacro(strKey, iValue);
  138. }
  139. void DefineBoolMacro(LPCTSTR pszKey, BOOL bValue)
  140. {
  141. if (bValue)
  142. DefineMacro(pszKey, _T("1"));
  143. else
  144. UndefMacro(pszKey);
  145. }
  146. void DefineBoolMacro(LPCTSTR pszKey, int iItem, BOOL bValue)
  147. {
  148. CString strKey(pszKey);
  149. MakeKey(strKey, iItem);
  150. DefineBoolMacro(strKey, bValue);
  151. }
  152. void DefineStringMacro(LPCTSTR pszKey, LPCTSTR pszValue)
  153. {
  154. DefineMacro(pszKey, pszValue);
  155. }
  156. void DefineStringMacro(LPCTSTR pszKey, int iItem, LPCTSTR pszValue)
  157. {
  158. CString strKey(pszKey);
  159. MakeKey(strKey, iItem);
  160. DefineStringMacro(strKey, pszValue);
  161. }
  162. // Report an error
  163. void ReportError(UINT nIDP, LPCTSTR szArg)
  164. {
  165. CString strPrompt;
  166. AfxFormatString1(strPrompt, nIDP, szArg);
  167. AfxMessageBox(strPrompt);
  168. }
  169. // Report an error and throw a user exception
  170. void ReportAndThrow(UINT nIDP, LPCTSTR szArg)
  171. {
  172. ReportError(nIDP, szArg);
  173. AfxThrowUserException();
  174. }