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

Windows编程

开发平台:

Visual C++

  1. // typedlg.cpp : implementation file
  2. //
  3. // Copyright (c) 1985-1998, Microsoft Corporation. All rights reserved.
  4. //
  5. #include "stdafx.h"
  6. #include "customwz.h"
  7. #include "sampleaw.h"
  8. #include "typedlg.h"
  9. #include "options.h"
  10. #include "paint.h"
  11. #ifdef _PSEUDO_DEBUG
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCustomTypeDlg dialog
  17. CCustomTypeDlg::CCustomTypeDlg()
  18. : CAppWizStepDlg(CCustomTypeDlg::IDD)
  19. {
  20. //{{AFX_DATA_INIT(CCustomTypeDlg)
  21. m_nCustomType = CUSTOMTYPE_ZAP;
  22. m_nCustomSteps = 1;
  23. m_strTitle = _T("");
  24. //}}AFX_DATA_INIT
  25. m_strLastCustomSteps = _T("1");
  26. SetBitmap();
  27. }
  28. void CCustomTypeDlg::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CAppWizStepDlg::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CCustomTypeDlg)
  32. DDX_Radio(pDX, IDC_ZAP, m_nCustomType);
  33. DDX_Text(pDX, IDC_STEPS, m_nCustomSteps);
  34. DDV_MinMaxUInt(pDX, m_nCustomSteps, 0, 9);
  35. DDX_Text(pDX, IDC_TITLE, m_strTitle);
  36. //}}AFX_DATA_MAP
  37. EnableCustomSteps();
  38. }
  39. // Base default title of custom AppWizard off of project name.  This is called
  40. //  by CDialogChooser when the New Project dialog is dimissed with a
  41. //  new project name.
  42. void CCustomTypeDlg::UpdateTitle(const CString& strRoot)
  43. {
  44. m_strTitle = strRoot + _T(" AppWizard");
  45. }
  46. BEGIN_MESSAGE_MAP(CCustomTypeDlg, CAppWizStepDlg)
  47. //{{AFX_MSG_MAP(CCustomTypeDlg)
  48. ON_COMMAND_EX(IDC_ZAP, OnClickedRadio)
  49. ON_COMMAND_EX(IDC_SEQUENCE, OnClickedRadio)
  50. ON_COMMAND_EX(IDC_CUSTOM, OnClickedRadio)
  51. ON_WM_PAINT()
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CCustomTypeDlg message handlers
  56. #define STEP1_LEFT          8
  57. #define STEP1_TOP           40
  58. #define STEP1_WIDTH         179
  59. #define STEP1_HEIGHT        180
  60. // Override OnPaint to draw pictures on the left side
  61. void CCustomTypeDlg::OnPaint()
  62. {
  63. CPaintDC dc(this); // device context for painting
  64. PaintBackground(&dc, this);
  65. CDC dcMem;
  66. if (!dcMem.CreateCompatibleDC(&dc))
  67. return;
  68. // Picture
  69. PaintBitmap(m_nBitmap, STEP1_LEFT, STEP1_TOP, STEP1_WIDTH, STEP1_HEIGHT, &dc, &dcMem);
  70. }
  71. // Set member variable to the bitmap ID corresponding to the currently
  72. //  selected custom AppWizard type
  73. void CCustomTypeDlg::SetBitmap()
  74. {
  75. static UINT nBmps[] = {IDB_STEP1A, IDB_STEP1B, IDB_STEP1C};
  76. ASSERT (m_nCustomType >= 0 && m_nCustomType < 3);
  77. m_nBitmap = nBmps[m_nCustomType];
  78. }
  79. // This handler allows us to dynamically change the bitmap as soon
  80. //  as a new custom AppWizard type is selected.  We also change the number
  81. //  of steps accordingly, since two of the options add an extra
  82. //  step after this one.
  83. BOOL CCustomTypeDlg::OnClickedRadio(UINT nID)
  84. {
  85. switch(nID)
  86. {
  87. case IDC_ZAP:
  88. m_nCustomType = CUSTOMTYPE_ZAP;
  89. SetNumberOfSteps(2);
  90. break;
  91. case IDC_CUSTOM:
  92. m_nCustomType = CUSTOMTYPE_BASE;
  93. SetNumberOfSteps(1);
  94. break;
  95. case IDC_SEQUENCE:
  96. m_nCustomType = CUSTOMTYPE_SEQUENCE;
  97. SetNumberOfSteps(2);
  98. break;
  99. default:
  100. ASSERT(FALSE);
  101. }
  102. SetBitmap();
  103. sampleaw.SetCustomType(m_nCustomType);
  104. EnableCustomSteps();
  105. // Invalidate the portion of this dialog on which we draw the picture
  106. CRect rect(STEP1_LEFT, STEP1_TOP, STEP1_LEFT + STEP1_WIDTH, STEP1_TOP + STEP1_HEIGHT);
  107. RedrawWindow(&rect, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
  108. return TRUE;
  109. }
  110. // If we're basing a custom AppWizard off of a project, that custom AppWizard
  111. //  must have 0 steps.  Thus, we must disable the "How many custom steps?"
  112. //  control when appropriate.
  113. void CCustomTypeDlg::EnableCustomSteps()
  114. {
  115. BOOL bEnable = (m_nCustomType == CUSTOMTYPE_BASE || m_nCustomType == CUSTOMTYPE_SEQUENCE);
  116. GetDlgItem(IDC_STC_STEPS)->EnableWindow(bEnable);
  117. if (!GetDlgItem(IDC_STEPS)->EnableWindow(bEnable))
  118. // Remember number of custom steps if it was previously enabled
  119. GetDlgItem(IDC_STEPS)->GetWindowText(m_strLastCustomSteps);
  120. if (bEnable == TRUE)
  121. GetDlgItem(IDC_STEPS)->SetWindowText(m_strLastCustomSteps);
  122. else
  123. GetDlgItem(IDC_STEPS)->SetWindowText(_T("0"));
  124. }
  125. //  These must be in the same order as the corresponding radio buttons &
  126. //   CUSTOMTYPE enum
  127. static LPCTSTR lpszCustomTypeMacros[] =
  128. {
  129. _T("CUSTOMTYPE_ZAP"),
  130. _T("CUSTOMTYPE_SEQUENCE"),
  131. _T("CUSTOMTYPE_BASE"),
  132. };
  133. // Sets the macro corresponding to the custom AppWizard type (resets the others)
  134. void CCustomTypeDlg::SetCustomTypeMacros()
  135. {
  136. for (UINT i=0; i < CUSTOMTYPE_MAX; i++)
  137. DefineBoolMacro(lpszCustomTypeMacros[i], FALSE);
  138. ASSERT(m_nCustomType >= 0 && m_nCustomType <= 2);
  139. DefineBoolMacro(lpszCustomTypeMacros[m_nCustomType], TRUE);
  140. }
  141. // Sets the macro for the custom AppWizard's title
  142. void CCustomTypeDlg::DefineTitleMacro()
  143. {
  144. DefineStringMacro(_T("AW_TITLE"), m_strTitle);
  145. }
  146. // Set step-related template macros before dismissing
  147. BOOL CCustomTypeDlg::OnDismiss()
  148. {
  149. ASSERT (0 <= m_nCustomType && m_nCustomType < CUSTOMTYPE_MAX);
  150. if (!UpdateData(TRUE))
  151. return FALSE;
  152. g_options.m_nCustomType = m_nCustomType;
  153. g_options.m_nCustomSteps = m_nCustomSteps;
  154. g_options.DefineDlgMacros();
  155. SetCustomTypeMacros();
  156. DefineTitleMacro();
  157. return TRUE;
  158. }