TaskDialogSamples.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "Resource.h"
  3. #include "TaskDialogSamples.h"
  4. ///////////////// TEST CODE ///////////////////
  5. enum { IDC_BUTTON_STATE = 101, IDC_BUTTON_MODE, };
  6. CProgressEffectsDialog::CProgressEffectsDialog(CWnd* pWndParent)
  7. : CXTPTaskDialog(pWndParent)
  8. , m_eState(PBST_NORMAL)
  9. , m_bMarquee(TRUE)
  10. {
  11. SetWindowTitle(_T("Progress Effects"));
  12. AddButton(_T("Cycle State"), IDC_BUTTON_STATE);
  13. AddButton(_T("Toggle Mode"), IDC_BUTTON_MODE);
  14. AddButton(_T("Change password"), IDOK);
  15. m_config.dwFlags |= TDF_ALLOW_DIALOG_CANCELLATION | TDF_SHOW_PROGRESS_BAR;
  16. }
  17. void CProgressEffectsDialog::OnDialogConstructed()
  18. {
  19. UpdateMainInstruction();
  20. SetButtonElevationRequired(IDOK, TRUE);
  21. }
  22. void CProgressEffectsDialog::OnButtonClicked(int nButtonID, BOOL& bCloseDialog)
  23. {
  24. switch (nButtonID)
  25. {
  26. case IDC_BUTTON_STATE: CycleState(); bCloseDialog = FALSE; break;
  27. case IDC_BUTTON_MODE:  ToggleMode(); bCloseDialog = FALSE; break;
  28. }
  29. }
  30. void CProgressEffectsDialog::UpdateMainInstruction()
  31. {
  32. CString strText;
  33. switch (m_eState)
  34. {
  35. case PBST_NORMAL: strText += _T("State: Normaln"); break;
  36. case PBST_PAUSED: strText += _T("State: Pausedn"); break;
  37. case PBST_ERROR:  strText += _T("State: Errorn");  break;
  38. }
  39. CString strTemp;
  40. strTemp.Format(_T("Marquee: %s"), m_bMarquee ? _T("True") : _T("False"));
  41. strText += strTemp;
  42. SetMainInstruction(strText);
  43. if (m_bMarquee) {
  44. SetMarqueeProgressBar(m_bMarquee);
  45. StartProgressBarMarquee(TRUE, 10);
  46. }
  47. else {
  48. SetProgressBarRange(0, 50);
  49. SetProgressBarPos(25);
  50. }
  51. }
  52. void CProgressEffectsDialog::CycleState()
  53. {
  54. switch (m_eState)
  55. {
  56. case PBST_NORMAL: m_eState = PBST_PAUSED; break;
  57. case PBST_PAUSED: m_eState = PBST_ERROR;  break;
  58. case PBST_ERROR:  m_eState = PBST_NORMAL; break;
  59. }
  60. SetProgressBarState(m_eState);
  61. UpdateMainInstruction();
  62. }
  63. void CProgressEffectsDialog::ToggleMode()
  64. {
  65. m_bMarquee = !m_bMarquee;
  66. SetMarqueeProgressBar(m_bMarquee);
  67. UpdateMainInstruction();
  68. }
  69. //////////////////////////////////////////////////////////////////////////
  70. // CDynamicTextDialog
  71. CDynamicTextDialog::CDynamicTextDialog(CWnd* pWndParent)
  72. : CXTPTaskDialog(pWndParent)
  73. {
  74. SetWindowTitle(_T("Dynamic Text"));
  75. SetFooter(_T("Click Button to change text"));
  76. SetContent(_T("<a href="click">Some text!</a>"));    
  77. AddButton(_T("Change Main text"), 100);
  78. AddButton(_T("Change Content text"), 101);
  79. AddButton(_T("Change Footer text"), 102);
  80. EnableMessageBoxStyle(); // Only for our Codejock Implementation
  81. EnableCancellation();
  82. EnableHyperlinks();
  83. SetCommonButtons(TDCBF_OK_BUTTON);
  84. }
  85. void CDynamicTextDialog::OnDialogConstructed()
  86. {
  87. }
  88. void CDynamicTextDialog::OnButtonClicked(int nButtonID, BOOL& bCloseDialog)
  89. {
  90. switch (nButtonID)
  91. {
  92. case 100: 
  93. SetMainInstruction(_T("New text"));   
  94. EnableButton(100, FALSE);
  95. bCloseDialog = FALSE;   
  96. break;
  97. case 101:
  98. SetContent(_T("<a href="click">Some New text!</a>"));    
  99. EnableButton(101, FALSE);
  100. bCloseDialog = FALSE;   
  101. break;
  102. case 102:
  103. SetFooter(_T("New text"));    
  104. EnableButton(102, FALSE);
  105. bCloseDialog = FALSE;   
  106. break;
  107. }
  108. }
  109. class CSendFeedbackDialog : public CXTPTaskDialog
  110. {
  111. public:
  112. CSendFeedbackDialog();
  113. virtual ~CSendFeedbackDialog(void);
  114. protected:
  115. virtual void OnNavigated();
  116. virtual void OnButtonClicked(int /*buttonId*/, BOOL& closeDialog);
  117. virtual void OnTimer(DWORD dwMilliSeconds, BOOL& bReset);
  118. };
  119. enum
  120. {
  121. MaxRange = 5000
  122. };
  123. CSendFeedbackDialog::CSendFeedbackDialog()
  124. {
  125. SetWindowTitle(_T("Error Sample (page 2)"));
  126. SetContent(_T("Copying your feedback"));
  127. EnableCancellation();
  128. ShowProgressBar(TRUE);
  129. EnableCallbackTimer();
  130. }
  131. CSendFeedbackDialog::~CSendFeedbackDialog(void)
  132. {
  133. }
  134. void CSendFeedbackDialog::OnNavigated()
  135. {
  136. SetProgressBarRange(0, MaxRange);
  137. }
  138. void CSendFeedbackDialog::OnButtonClicked(int /*buttonId*/, BOOL& closeDialog)
  139. {
  140. closeDialog = TRUE;
  141. }
  142. void CSendFeedbackDialog::OnTimer(DWORD dwMilliSeconds, BOOL& /*bReset*/)
  143. {
  144. if (MaxRange >= dwMilliSeconds)
  145. {
  146. USES_CONVERSION;
  147. CString text;
  148. text.Format(_T("Sending... %i%%"), MulDiv(dwMilliSeconds, 100, MaxRange));
  149. SetMainInstruction(text);
  150. SetProgressBarPos(dwMilliSeconds);
  151. SetProgressBarRange(0, MaxRange);
  152. }
  153. else
  154. {
  155. SetMainInstruction(_T("Thanks for the feedback!"));
  156. SetContent(_T("Our developers will get right on that..."));
  157. SetProgressBarPos(MaxRange);
  158. }
  159. }
  160. //////////////////////////////////////////////////////////////////////////
  161. //
  162. CTimerDialog::CTimerDialog(CWnd* pWndParent)
  163. : CXTPTaskDialog(pWndParent)
  164. {
  165. SetWindowTitle(_T("Timer Sample"));
  166. SetMainInstruction(_T("Timer Sample"));
  167. SetMainIcon(TD_INFORMATION_ICON);
  168. AddButton(_T("Send Feedback"), 100);
  169. SetCommonButtons(TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON);
  170. EnableCallbackTimer();
  171. EnableMessageBoxStyle(); // Only for our Codejock Implementation
  172. SetVerificationText(_T("Enable Timer"));
  173. SetVerifyCheckState();
  174. m_nIcon = 0;
  175. }
  176. void CTimerDialog::OnDialogConstructed()
  177. {
  178. }
  179. void CTimerDialog::OnButtonClicked(int nButtonID, BOOL& bCloseDialog)
  180. {
  181. if (nButtonID == 100)
  182. {
  183. CSendFeedbackDialog fd;
  184. fd.DoModal(FALSE);
  185. bCloseDialog = FALSE;
  186. }
  187. }
  188. void CTimerDialog::OnVerificationClicked(BOOL bChecked)
  189. {
  190. m_bUpdateIcon = bChecked;
  191. }
  192. void CTimerDialog::OnTimer(DWORD dwMilliSeconds, BOOL& bReset)
  193. {
  194. if (dwMilliSeconds > 700 && m_bUpdateIcon)
  195. {
  196. m_nIcon = (m_nIcon + 1) % 5;
  197. if (m_nIcon < 4)
  198. {
  199. SetMainIcon(m_nIcon == 0 ? TD_INFORMATION_ICON : 
  200. m_nIcon == 1 ? TD_WARNING_ICON : 
  201. m_nIcon == 2 ? TD_ERROR_ICON : TD_SHIELD_ICON);
  202. }
  203. else
  204. {
  205. SetMainIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  206. }
  207. bReset = TRUE;
  208. }
  209. }