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

对话框与窗口

开发平台:

Visual C++

  1. // TaskSheetProperties.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "VistaTaskDialog.h"
  5. #include "TaskSheetProperties.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CTaskSheetProperties
  13. IMPLEMENT_DYNAMIC(CTaskSheetProperties, CPropertySheet)
  14. CTaskSheetProperties::CTaskSheetProperties(CWnd* pWndParent)
  15. : CPropertySheet(IDS_PROPSHT_CAPTION, pWndParent)
  16. {
  17. AddPage(&m_pageGeneral);
  18. AddPage(&m_pageExpanded);
  19. AddPage(&m_pageButtons);
  20. AddPage(&m_pageRadioButtons);
  21. AddPage(&m_pageIcons);
  22. AddPage(&m_pageSamples);
  23. m_bUseComCtl32 = FALSE;
  24. #ifdef _XTP_INCLUDE_SKINFRAMEWORK
  25. XTPSkinManager()->SetApplyOptions(/*xtpSkinApplyMetrics |*/ xtpSkinApplyFrame | xtpSkinApplyColors);
  26. #endif
  27. }
  28. CTaskSheetProperties::~CTaskSheetProperties()
  29. {
  30. }
  31. void CTaskSheetProperties::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CPropertySheet::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(CVistaTaskDialogEditButton)
  35. DDX_Control(pDX, IDOK, m_btnOk);
  36. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  37. DDX_Control(pDX, ID_APPLY_NOW, m_btnApply);
  38. DDX_Control(pDX, IDHELP, m_btnHelp);
  39. //}}AFX_DATA_MAP
  40. }
  41. BEGIN_MESSAGE_MAP(CTaskSheetProperties, CPropertySheet)
  42. //{{AFX_MSG_MAP(CTaskSheetProperties)
  43. ON_BN_CLICKED(IDHELP, OnChkUseComCtl)
  44. ON_BN_CLICKED(IDOK, OnShowDialog)
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CTaskSheetProperties message handlers
  49. void CTaskSheetProperties::GetButtonRect(CRect& rcButton, CButton& wndButton, BOOL bHideButton /*= FALSE*/)
  50. {
  51. if (::IsWindow(wndButton.m_hWnd))
  52. {
  53. wndButton.GetWindowRect(&rcButton);
  54. ScreenToClient(&rcButton);
  55. if (bHideButton)
  56. wndButton.ShowWindow(SW_HIDE);
  57. }
  58. }
  59. int CTaskSheetProperties::GetPadding()
  60. {
  61. CString strText;
  62. m_btnCancel.GetWindowText(strText);
  63. CWindowDC dc(NULL);
  64. CSize sizeText = dc.GetTextExtent(strText);
  65. return (m_rcCancel.Width()-sizeText.cx) / 2;
  66. }
  67. BOOL CTaskSheetProperties::OnInitDialog() 
  68. {
  69. BOOL bResult = CPropertySheet::OnInitDialog();
  70. // transfer data into the dialog from member variables
  71. UpdateData(FALSE);
  72. // TODO: Add your specialized code here
  73. GetButtonRect(m_rcOk, m_btnOk);
  74. GetButtonRect(m_rcCancel, m_btnCancel);
  75. GetButtonRect(m_rcApply, m_btnApply, TRUE);
  76. GetButtonRect(m_rcHelp, m_btnHelp);
  77. // Move and change text for the OK button.
  78. m_btnCancel.MoveWindow(&m_rcHelp);
  79. m_btnCancel.SetWindowText(_T("Done"));
  80. // Move and resize and change text for the Cancel button.
  81. int cxPad = GetPadding();
  82. CWindowDC dc(NULL);
  83. CString strText = _T("Show Dialog");
  84. CSize sizeText = dc.GetTextExtent(strText);
  85. CRect rcCancel(m_rcApply);
  86. rcCancel.left = rcCancel.right - (cxPad + sizeText.cx + cxPad);
  87. m_btnOk.MoveWindow(&rcCancel);
  88. m_btnOk.SetWindowText(strText);
  89. // Move, resize, change text and style for Help button.
  90. CRect rcHelp(m_rcOk);
  91. CXTPWindowRect rcTab(GetTabControl());
  92. ScreenToClient(&rcTab);
  93. rcHelp.right = rcCancel.left - (m_rcHelp.left-m_rcApply.right);
  94. rcHelp.left = rcTab.left;
  95. // For Windows Vista, allow the option to use ComCtrl32 version.
  96. m_btnHelp.SetButtonStyle(BS_TEXT | BS_CHECKBOX | BS_LEFTTEXT);
  97. m_btnHelp.SetWindowText(_T("Use ComCtl32.dll ( Vista only )"));
  98. m_btnHelp.SetCheck(m_bUseComCtl32);
  99. m_btnHelp.MoveWindow(&rcHelp);
  100. m_btnHelp.ShowWindow(XTPSystemVersion()->IsWinVistaOrGreater() ? SW_SHOWNOACTIVATE : SW_HIDE);
  101. for (int i = GetPageCount()-1; i >= 0; --i)
  102. {
  103. SetActivePage(i);
  104. }
  105. return bResult;
  106. }
  107. void CTaskSheetProperties::OnChkUseComCtl()
  108. {
  109. m_bUseComCtl32 = !m_bUseComCtl32;
  110. m_btnHelp.SetCheck(m_bUseComCtl32);
  111. if (::IsWindow(m_pageIcons.m_hWnd) && 
  112. ::IsWindow(m_pageIcons.m_chkSysIcon.m_hWnd))
  113. {
  114. m_pageIcons.m_chkSysIcon.EnableWindow(!m_bUseComCtl32);
  115. }
  116. }
  117. inline CString ConvertNewLineChar(CString strBuffer)
  118. {
  119. REPLACE_S(strBuffer, _T("\n"), _T("n"));
  120. return strBuffer;
  121. }
  122. void CTaskSheetProperties::OnShowDialog()
  123. {
  124. //CAboutDlg ad;
  125. //ad.DoModal();
  126. //return;
  127. //AfxMessageBox("A TaskDialog presents Hyperlink Text information in a clear and consistent way.", MB_OK|MB_ICONWARNING);
  128. //return;
  129. CTaskDialogEx taskDialog(this);
  130. taskDialog.SetWindowTitle(m_pageGeneral.m_strWindowTitle);
  131. taskDialog.SetMainInstruction(m_pageGeneral.m_strMainInstruction);
  132. taskDialog.SetContent(ConvertNewLineChar(m_pageGeneral.m_strContent));
  133. taskDialog.SetFooter(ConvertNewLineChar(m_pageGeneral.m_strFooter));
  134. taskDialog.SetVerificationText(ConvertNewLineChar(m_pageGeneral.m_strVerificationText));
  135. taskDialog.SetExpandedInformation(ConvertNewLineChar(m_pageExpanded.m_strExpandedInformation));
  136. taskDialog.SetExpandedControlText(m_pageExpanded.m_strExpandedControlText);
  137. taskDialog.SetCollapsedControlText(m_pageExpanded.m_strCollapsedControlText);
  138. //-------------------------------------------------------------------------
  139. // General tab.
  140. //-------------------------------------------------------------------------
  141. if (m_pageGeneral.m_bWidth)
  142. taskDialog.SetWidth(m_pageGeneral.m_nWidth, TRUE);
  143. taskDialog.SetVerifyCheckState(m_pageGeneral.m_bVerify);
  144. taskDialog.EnableHyperlinks(m_pageGeneral.m_bHyperLinks);
  145. taskDialog.EnableCancellation(m_pageGeneral.m_bAllowCancel);
  146. taskDialog.EnableRelativePosition(m_pageGeneral.m_bPosition);
  147. taskDialog.ShowProgressBar(m_pageGeneral.m_bProgress, m_pageGeneral.m_bMarquee);
  148. taskDialog.EnableRtlLayout(m_pageGeneral.m_bRtl);
  149. //-------------------------------------------------------------------------
  150. // Expanded tab.
  151. //-------------------------------------------------------------------------
  152. taskDialog.ExpandedByDefault(m_pageExpanded.m_bByDefault);
  153. taskDialog.ExpandFooterArea(m_pageExpanded.m_bFooterArea);
  154. //-------------------------------------------------------------------------
  155. // Buttons tab.
  156. //-------------------------------------------------------------------------
  157. taskDialog.SetCommonButtons(
  158. m_pageButtons.m_bOk,
  159.     m_pageButtons.m_bYes,
  160.     m_pageButtons.m_bNo,
  161.     m_pageButtons.m_bCancel,
  162.     m_pageButtons.m_bRetry,
  163.     m_pageButtons.m_bClose);
  164. if (::IsWindow(m_pageButtons.m_listCustom.m_hWnd))
  165. {
  166. for (int i = 0; i < m_pageButtons.m_listCustom.GetItemCount(); ++i)
  167. {
  168. CString strText = ConvertNewLineChar(m_pageButtons.m_listCustom.GetItemText(i, 0));
  169. taskDialog.AddButton(strText, _ttoi(m_pageButtons.m_listCustom.GetItemText(i, 1)));
  170. }
  171. taskDialog.EnableCommandLinks(m_pageButtons.m_bUseLinks, m_pageButtons.m_bShowIcons);
  172. }
  173. if (::IsWindow(m_pageButtons.m_comboDefault.m_hWnd))
  174. {
  175. int iCurSel = m_pageButtons.m_comboDefault.GetCurSel();
  176. if (iCurSel != CB_ERR)
  177. {
  178. taskDialog.SetDefaultButton(
  179. (int)m_pageButtons.m_comboDefault.GetItemData(iCurSel));
  180. }
  181. }
  182. //-------------------------------------------------------------------------
  183. // Radio buttons tab.
  184. //-------------------------------------------------------------------------
  185. if (::IsWindow(m_pageRadioButtons.m_listCustom.m_hWnd))
  186. {
  187. for (int i = 0; i < m_pageRadioButtons.m_listCustom.GetItemCount(); ++i)
  188. {
  189. taskDialog.AddRadioButton(m_pageRadioButtons.m_listCustom.GetItemText(i, 0),
  190. _ttoi(m_pageRadioButtons.m_listCustom.GetItemText(i, 1)));
  191. }
  192. }
  193. if (::IsWindow(m_pageRadioButtons.m_comboDefault.m_hWnd))
  194. {
  195. int iCurSel = m_pageRadioButtons.m_comboDefault.GetCurSel();
  196. if (iCurSel != CB_ERR)
  197. {
  198. taskDialog.SetDefaultRadioButton((int)
  199. m_pageRadioButtons.m_comboDefault.GetItemData(iCurSel));
  200. }
  201. }
  202. taskDialog.NoDefaultRadioButton(m_pageRadioButtons.m_bNoDefault);
  203. //-------------------------------------------------------------------------
  204. // Icons tab.
  205. //-------------------------------------------------------------------------
  206. if (m_pageIcons.m_nMainIcon != 0)
  207. {
  208. if (::IsWindow(m_pageIcons.m_comboMainIcon.m_hWnd))
  209. {
  210. taskDialog.SetMainIcon((LPCWSTR)m_pageIcons.m_comboMainIcon.GetItemData(m_pageIcons.m_nMainIcon));
  211. }
  212. }
  213. else
  214. {
  215. taskDialog.SetMainIcon(m_pageIcons.m_hMainIcon);
  216. }
  217. if (m_pageIcons.m_nFootIcon != 0)
  218. {
  219. if (::IsWindow(m_pageIcons.m_comboFootIcon.m_hWnd))
  220. {
  221. taskDialog.SetFooterIcon((LPCWSTR)
  222. m_pageIcons.m_comboFootIcon.GetItemData(m_pageIcons.m_nFootIcon));
  223. }
  224. }
  225. else
  226. {
  227. taskDialog.SetFooterIcon(m_pageIcons.m_hFootIcon);
  228. }
  229. taskDialog.SetUseSysIcons(m_pageIcons.m_bSysIcons);
  230. //taskDialog.EnableMinimize(TRUE);
  231. #if 1
  232. INT_PTR nResult =  taskDialog.DoModal(m_bUseComCtl32);
  233. TRACE(_T("Result is %in"), nResult);
  234. if (!m_pageGeneral.m_strVerificationText.IsEmpty())
  235. {
  236. TRACE(_T("Verification is %in"), taskDialog.IsVerificiationChecked());
  237. }
  238. if (m_pageRadioButtons.m_listCustom.GetItemCount() > 0)
  239. {
  240. TRACE(_T("Selected RadioButton is %in"), taskDialog.GetSelectedRadioButtonId());
  241. }
  242. #endif
  243. #if 0
  244. CAlgoTaskDialog taskDlg;
  245. taskDlg.DoModal(FALSE);
  246. if (taskDialog.GetSelectedButtonId() == CB_SAVE)
  247. {
  248. /*switch (taskDialog.GetSelectedRadioButtonId())
  249. {
  250. case RB_GOOD:
  251. TaskDialog(NULL, NULL,
  252. L"TaskDialog Result",
  253. L"You like TaskDialogs alot", L"I'm glad you like TaskDialogs!",
  254. TDCBF_OK_BUTTON, NULL, NULL);
  255. break;
  256. case RB_OK:
  257. TaskDialog(NULL, NULL,
  258. L"TaskDialog Result",
  259. L"You like TaskDialogs a little bit", L"Maybe we'll do better next time.",
  260. TDCBF_OK_BUTTON, NULL, NULL);
  261. break;
  262. case RB_BAD:
  263. TaskDialog(NULL, NULL,
  264. L"TaskDialog Result",
  265. L"You don't like TaskDialogs at all", L"Back to MessageBox you go!",
  266. TDCBF_OK_BUTTON, NULL, NULL);
  267. break;
  268. }*/
  269. }
  270. #endif
  271. }
  272. BOOL CTaskSheetProperties::UpdateButtonMap(CString strName, int nID, CComboBox* pWndCombo /*=NULL*/, BOOL bAdd /*=TRUE*/)
  273. {
  274. CString strLookUp;
  275. if (bAdd)
  276. {
  277. if (!m_mapButtons.Lookup(nID, strLookUp))
  278. {
  279. AfxExtractSubString(strName, strName, 0);
  280. if (::IsWindow(pWndCombo->GetSafeHwnd()))
  281. {
  282. int nItem = pWndCombo->AddString(strName);
  283. pWndCombo->SetItemData(nItem, nID);
  284. }
  285. m_mapButtons[nID] = strName;
  286. return TRUE;
  287. }
  288. CString strBuffer;
  289. strBuffer.Format(_T("The button "%s" already exists with the ID %d"), strLookUp, nID);
  290. AfxMessageBox(strBuffer, MB_ICONEXCLAMATION|MB_OK);
  291. }
  292. else
  293. {
  294. if (m_mapButtons.Lookup(nID, strLookUp))
  295. {
  296. if (::IsWindow(pWndCombo->GetSafeHwnd()))
  297. {
  298. pWndCombo->DeleteString(
  299. pWndCombo->FindStringExact(0, strLookUp));
  300. }
  301. return m_mapButtons.RemoveKey(nID);
  302. }
  303. }
  304. return FALSE;
  305. }