TaskSheetProperties.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:11k
源码类别:
对话框与窗口
开发平台:
Visual C++
- // TaskSheetProperties.cpp : implementation file
- //
- #include "stdafx.h"
- #include "VistaTaskDialog.h"
- #include "TaskSheetProperties.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CTaskSheetProperties
- IMPLEMENT_DYNAMIC(CTaskSheetProperties, CPropertySheet)
- CTaskSheetProperties::CTaskSheetProperties(CWnd* pWndParent)
- : CPropertySheet(IDS_PROPSHT_CAPTION, pWndParent)
- {
- AddPage(&m_pageGeneral);
- AddPage(&m_pageExpanded);
- AddPage(&m_pageButtons);
- AddPage(&m_pageRadioButtons);
- AddPage(&m_pageIcons);
- AddPage(&m_pageSamples);
- m_bUseComCtl32 = FALSE;
- #ifdef _XTP_INCLUDE_SKINFRAMEWORK
- XTPSkinManager()->SetApplyOptions(/*xtpSkinApplyMetrics |*/ xtpSkinApplyFrame | xtpSkinApplyColors);
- #endif
- }
- CTaskSheetProperties::~CTaskSheetProperties()
- {
- }
- void CTaskSheetProperties::DoDataExchange(CDataExchange* pDX)
- {
- CPropertySheet::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CVistaTaskDialogEditButton)
- DDX_Control(pDX, IDOK, m_btnOk);
- DDX_Control(pDX, IDCANCEL, m_btnCancel);
- DDX_Control(pDX, ID_APPLY_NOW, m_btnApply);
- DDX_Control(pDX, IDHELP, m_btnHelp);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CTaskSheetProperties, CPropertySheet)
- //{{AFX_MSG_MAP(CTaskSheetProperties)
- ON_BN_CLICKED(IDHELP, OnChkUseComCtl)
- ON_BN_CLICKED(IDOK, OnShowDialog)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CTaskSheetProperties message handlers
- void CTaskSheetProperties::GetButtonRect(CRect& rcButton, CButton& wndButton, BOOL bHideButton /*= FALSE*/)
- {
- if (::IsWindow(wndButton.m_hWnd))
- {
- wndButton.GetWindowRect(&rcButton);
- ScreenToClient(&rcButton);
- if (bHideButton)
- wndButton.ShowWindow(SW_HIDE);
- }
- }
- int CTaskSheetProperties::GetPadding()
- {
- CString strText;
- m_btnCancel.GetWindowText(strText);
- CWindowDC dc(NULL);
- CSize sizeText = dc.GetTextExtent(strText);
- return (m_rcCancel.Width()-sizeText.cx) / 2;
- }
- BOOL CTaskSheetProperties::OnInitDialog()
- {
- BOOL bResult = CPropertySheet::OnInitDialog();
- // transfer data into the dialog from member variables
- UpdateData(FALSE);
- // TODO: Add your specialized code here
- GetButtonRect(m_rcOk, m_btnOk);
- GetButtonRect(m_rcCancel, m_btnCancel);
- GetButtonRect(m_rcApply, m_btnApply, TRUE);
- GetButtonRect(m_rcHelp, m_btnHelp);
- // Move and change text for the OK button.
- m_btnCancel.MoveWindow(&m_rcHelp);
- m_btnCancel.SetWindowText(_T("Done"));
- // Move and resize and change text for the Cancel button.
- int cxPad = GetPadding();
- CWindowDC dc(NULL);
- CString strText = _T("Show Dialog");
- CSize sizeText = dc.GetTextExtent(strText);
- CRect rcCancel(m_rcApply);
- rcCancel.left = rcCancel.right - (cxPad + sizeText.cx + cxPad);
- m_btnOk.MoveWindow(&rcCancel);
- m_btnOk.SetWindowText(strText);
- // Move, resize, change text and style for Help button.
- CRect rcHelp(m_rcOk);
- CXTPWindowRect rcTab(GetTabControl());
- ScreenToClient(&rcTab);
- rcHelp.right = rcCancel.left - (m_rcHelp.left-m_rcApply.right);
- rcHelp.left = rcTab.left;
- // For Windows Vista, allow the option to use ComCtrl32 version.
- m_btnHelp.SetButtonStyle(BS_TEXT | BS_CHECKBOX | BS_LEFTTEXT);
- m_btnHelp.SetWindowText(_T("Use ComCtl32.dll ( Vista only )"));
- m_btnHelp.SetCheck(m_bUseComCtl32);
- m_btnHelp.MoveWindow(&rcHelp);
- m_btnHelp.ShowWindow(XTPSystemVersion()->IsWinVistaOrGreater() ? SW_SHOWNOACTIVATE : SW_HIDE);
- for (int i = GetPageCount()-1; i >= 0; --i)
- {
- SetActivePage(i);
- }
- return bResult;
- }
- void CTaskSheetProperties::OnChkUseComCtl()
- {
- m_bUseComCtl32 = !m_bUseComCtl32;
- m_btnHelp.SetCheck(m_bUseComCtl32);
- if (::IsWindow(m_pageIcons.m_hWnd) &&
- ::IsWindow(m_pageIcons.m_chkSysIcon.m_hWnd))
- {
- m_pageIcons.m_chkSysIcon.EnableWindow(!m_bUseComCtl32);
- }
- }
- inline CString ConvertNewLineChar(CString strBuffer)
- {
- REPLACE_S(strBuffer, _T("\n"), _T("n"));
- return strBuffer;
- }
- void CTaskSheetProperties::OnShowDialog()
- {
- //CAboutDlg ad;
- //ad.DoModal();
- //return;
- //AfxMessageBox("A TaskDialog presents Hyperlink Text information in a clear and consistent way.", MB_OK|MB_ICONWARNING);
- //return;
- CTaskDialogEx taskDialog(this);
- taskDialog.SetWindowTitle(m_pageGeneral.m_strWindowTitle);
- taskDialog.SetMainInstruction(m_pageGeneral.m_strMainInstruction);
- taskDialog.SetContent(ConvertNewLineChar(m_pageGeneral.m_strContent));
- taskDialog.SetFooter(ConvertNewLineChar(m_pageGeneral.m_strFooter));
- taskDialog.SetVerificationText(ConvertNewLineChar(m_pageGeneral.m_strVerificationText));
- taskDialog.SetExpandedInformation(ConvertNewLineChar(m_pageExpanded.m_strExpandedInformation));
- taskDialog.SetExpandedControlText(m_pageExpanded.m_strExpandedControlText);
- taskDialog.SetCollapsedControlText(m_pageExpanded.m_strCollapsedControlText);
- //-------------------------------------------------------------------------
- // General tab.
- //-------------------------------------------------------------------------
- if (m_pageGeneral.m_bWidth)
- taskDialog.SetWidth(m_pageGeneral.m_nWidth, TRUE);
- taskDialog.SetVerifyCheckState(m_pageGeneral.m_bVerify);
- taskDialog.EnableHyperlinks(m_pageGeneral.m_bHyperLinks);
- taskDialog.EnableCancellation(m_pageGeneral.m_bAllowCancel);
- taskDialog.EnableRelativePosition(m_pageGeneral.m_bPosition);
- taskDialog.ShowProgressBar(m_pageGeneral.m_bProgress, m_pageGeneral.m_bMarquee);
- taskDialog.EnableRtlLayout(m_pageGeneral.m_bRtl);
- //-------------------------------------------------------------------------
- // Expanded tab.
- //-------------------------------------------------------------------------
- taskDialog.ExpandedByDefault(m_pageExpanded.m_bByDefault);
- taskDialog.ExpandFooterArea(m_pageExpanded.m_bFooterArea);
- //-------------------------------------------------------------------------
- // Buttons tab.
- //-------------------------------------------------------------------------
- taskDialog.SetCommonButtons(
- m_pageButtons.m_bOk,
- m_pageButtons.m_bYes,
- m_pageButtons.m_bNo,
- m_pageButtons.m_bCancel,
- m_pageButtons.m_bRetry,
- m_pageButtons.m_bClose);
- if (::IsWindow(m_pageButtons.m_listCustom.m_hWnd))
- {
- for (int i = 0; i < m_pageButtons.m_listCustom.GetItemCount(); ++i)
- {
- CString strText = ConvertNewLineChar(m_pageButtons.m_listCustom.GetItemText(i, 0));
- taskDialog.AddButton(strText, _ttoi(m_pageButtons.m_listCustom.GetItemText(i, 1)));
- }
- taskDialog.EnableCommandLinks(m_pageButtons.m_bUseLinks, m_pageButtons.m_bShowIcons);
- }
- if (::IsWindow(m_pageButtons.m_comboDefault.m_hWnd))
- {
- int iCurSel = m_pageButtons.m_comboDefault.GetCurSel();
- if (iCurSel != CB_ERR)
- {
- taskDialog.SetDefaultButton(
- (int)m_pageButtons.m_comboDefault.GetItemData(iCurSel));
- }
- }
- //-------------------------------------------------------------------------
- // Radio buttons tab.
- //-------------------------------------------------------------------------
- if (::IsWindow(m_pageRadioButtons.m_listCustom.m_hWnd))
- {
- for (int i = 0; i < m_pageRadioButtons.m_listCustom.GetItemCount(); ++i)
- {
- taskDialog.AddRadioButton(m_pageRadioButtons.m_listCustom.GetItemText(i, 0),
- _ttoi(m_pageRadioButtons.m_listCustom.GetItemText(i, 1)));
- }
- }
- if (::IsWindow(m_pageRadioButtons.m_comboDefault.m_hWnd))
- {
- int iCurSel = m_pageRadioButtons.m_comboDefault.GetCurSel();
- if (iCurSel != CB_ERR)
- {
- taskDialog.SetDefaultRadioButton((int)
- m_pageRadioButtons.m_comboDefault.GetItemData(iCurSel));
- }
- }
- taskDialog.NoDefaultRadioButton(m_pageRadioButtons.m_bNoDefault);
- //-------------------------------------------------------------------------
- // Icons tab.
- //-------------------------------------------------------------------------
- if (m_pageIcons.m_nMainIcon != 0)
- {
- if (::IsWindow(m_pageIcons.m_comboMainIcon.m_hWnd))
- {
- taskDialog.SetMainIcon((LPCWSTR)m_pageIcons.m_comboMainIcon.GetItemData(m_pageIcons.m_nMainIcon));
- }
- }
- else
- {
- taskDialog.SetMainIcon(m_pageIcons.m_hMainIcon);
- }
- if (m_pageIcons.m_nFootIcon != 0)
- {
- if (::IsWindow(m_pageIcons.m_comboFootIcon.m_hWnd))
- {
- taskDialog.SetFooterIcon((LPCWSTR)
- m_pageIcons.m_comboFootIcon.GetItemData(m_pageIcons.m_nFootIcon));
- }
- }
- else
- {
- taskDialog.SetFooterIcon(m_pageIcons.m_hFootIcon);
- }
- taskDialog.SetUseSysIcons(m_pageIcons.m_bSysIcons);
- //taskDialog.EnableMinimize(TRUE);
- #if 1
- INT_PTR nResult = taskDialog.DoModal(m_bUseComCtl32);
- TRACE(_T("Result is %in"), nResult);
- if (!m_pageGeneral.m_strVerificationText.IsEmpty())
- {
- TRACE(_T("Verification is %in"), taskDialog.IsVerificiationChecked());
- }
- if (m_pageRadioButtons.m_listCustom.GetItemCount() > 0)
- {
- TRACE(_T("Selected RadioButton is %in"), taskDialog.GetSelectedRadioButtonId());
- }
- #endif
- #if 0
- CAlgoTaskDialog taskDlg;
- taskDlg.DoModal(FALSE);
- if (taskDialog.GetSelectedButtonId() == CB_SAVE)
- {
- /*switch (taskDialog.GetSelectedRadioButtonId())
- {
- case RB_GOOD:
- TaskDialog(NULL, NULL,
- L"TaskDialog Result",
- L"You like TaskDialogs alot", L"I'm glad you like TaskDialogs!",
- TDCBF_OK_BUTTON, NULL, NULL);
- break;
- case RB_OK:
- TaskDialog(NULL, NULL,
- L"TaskDialog Result",
- L"You like TaskDialogs a little bit", L"Maybe we'll do better next time.",
- TDCBF_OK_BUTTON, NULL, NULL);
- break;
- case RB_BAD:
- TaskDialog(NULL, NULL,
- L"TaskDialog Result",
- L"You don't like TaskDialogs at all", L"Back to MessageBox you go!",
- TDCBF_OK_BUTTON, NULL, NULL);
- break;
- }*/
- }
- #endif
- }
- BOOL CTaskSheetProperties::UpdateButtonMap(CString strName, int nID, CComboBox* pWndCombo /*=NULL*/, BOOL bAdd /*=TRUE*/)
- {
- CString strLookUp;
- if (bAdd)
- {
- if (!m_mapButtons.Lookup(nID, strLookUp))
- {
- AfxExtractSubString(strName, strName, 0);
- if (::IsWindow(pWndCombo->GetSafeHwnd()))
- {
- int nItem = pWndCombo->AddString(strName);
- pWndCombo->SetItemData(nItem, nID);
- }
- m_mapButtons[nID] = strName;
- return TRUE;
- }
- CString strBuffer;
- strBuffer.Format(_T("The button "%s" already exists with the ID %d"), strLookUp, nID);
- AfxMessageBox(strBuffer, MB_ICONEXCLAMATION|MB_OK);
- }
- else
- {
- if (m_mapButtons.Lookup(nID, strLookUp))
- {
- if (::IsWindow(pWndCombo->GetSafeHwnd()))
- {
- pWndCombo->DeleteString(
- pWndCombo->FindStringExact(0, strLookUp));
- }
- return m_mapButtons.RemoveKey(nID);
- }
- }
- return FALSE;
- }