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

对话框与窗口

开发平台:

Visual C++

  1. // TaskEditButtonDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "VistaTaskDialog.h"
  5. #include "TaskSheetProperties.h"
  6. #include "TaskEditButtonDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CTaskEditButtonDlg dialog
  14. CTaskEditButtonDlg::CTaskEditButtonDlg(CComboBox* pWndCombo /*=NULL*/, BOOL bIsEdit /*=TRUE*/, CWnd* pParent /*=NULL*/)
  15. : CDialog(CTaskEditButtonDlg::IDD, pParent)
  16. , m_bIsEdit(bIsEdit)
  17. , m_pWndCombo(pWndCombo)
  18. {
  19. //{{AFX_DATA_INIT(CTaskEditButtonDlg)
  20. m_strText = _T("");
  21. m_nID = 100;
  22. //}}AFX_DATA_INIT
  23. m_pDlgParent = DYNAMIC_DOWNCAST(CTaskSheetProperties, pParent);
  24. ASSERT_VALID(m_pDlgParent);
  25. //AddButton(L"OK",     IDOK);
  26. //AddButton(L"Cancel", IDCANCEL);
  27. //AddButton(L"Retry",  IDRETRY);
  28. //AddButton(L"Yes",    IDYES);
  29. //AddButton(L"No",     IDNO);
  30. //AddButton(L"Cancel", IDCLOSE);
  31. GetNextAvailableID();
  32. }
  33. void CTaskEditButtonDlg::DoDataExchange(CDataExchange* pDX)
  34. {
  35. CDialog::DoDataExchange(pDX);
  36. //{{AFX_DATA_MAP(CTaskEditButtonDlg)
  37. DDX_Control(pDX, IDC_EDIT_ID, m_wndEditCtrl);
  38. DDX_Control(pDX, IDC_SPIN_ID, m_wndSpinCtrl);
  39. DDX_Control(pDX, IDC_EDIT_TEXT, m_wndEditText);
  40. DDX_Text(pDX, IDC_EDIT_TEXT, m_strText);
  41. DDX_Text(pDX, IDC_EDIT_ID, m_nID);
  42. DDV_MinMaxInt(pDX, m_nID, 100, 200);
  43. //}}AFX_DATA_MAP
  44. }
  45. BEGIN_MESSAGE_MAP(CTaskEditButtonDlg, CDialog)
  46. //{{AFX_MSG_MAP(CTaskEditButtonDlg)
  47. ON_WM_DESTROY()
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CTaskEditButtonDlg message handlers
  52. BOOL CTaskEditButtonDlg::OnInitDialog() 
  53. {
  54. CDialog::OnInitDialog();
  55. // TODO: Add extra initialization here
  56. m_wndSpinCtrl.SetRange(100,200);
  57. if (!m_bIsEdit)
  58. {
  59. SetWindowText(_T("Add Button"));
  60. }
  61. return TRUE;  // return TRUE unless you set the focus to a control
  62.               // EXCEPTION: OCX Property Pages should return FALSE
  63. }
  64. void CTaskEditButtonDlg::AddButton(PCWSTR pszText, int nButtonID)
  65. {
  66. TASKDIALOG_BUTTON button;
  67. button.pszButtonText = pszText;
  68. button.nButtonID = nButtonID;
  69. m_arButtons.Add(button);
  70. }
  71. void CTaskEditButtonDlg::GetNextAvailableID(BOOL bUpdateData /*=FALSE*/)
  72. {
  73. if (::IsWindow(m_pDlgParent->GetSafeHwnd()))
  74. {
  75. CButtonMap& map = m_pDlgParent->GetButtonMap();
  76. POSITION pos = map.GetStartPosition();
  77. while (pos != NULL)
  78. {
  79. int nID; CString strText;
  80. map.GetNextAssoc(pos, nID, strText);
  81. m_nID = __max(m_nID, nID);
  82. }
  83. m_nID++;
  84. m_strText.Format(_T("New Button %d"), m_nID);
  85. if (bUpdateData)
  86. UpdateData(FALSE);
  87. }
  88. }
  89. void CTaskEditButtonDlg::OnOK()
  90. {
  91. // Don't allow buttons with ID's that are already in use.
  92. for (int i = 0; i <= m_arButtons.GetUpperBound(); i++)
  93. {
  94. TASKDIALOG_BUTTON& button = m_arButtons.GetAt(i);
  95. if (m_nID == button.nButtonID)
  96. {
  97. USES_CONVERSION;
  98. CString strBuffer;
  99. strBuffer.Format(IDS_ERROR_RESERVED,
  100. m_nID, W2CA(button.pszButtonText));
  101. AfxMessageBox(strBuffer, MB_ICONEXCLAMATION|MB_OK);
  102. GetNextAvailableID(TRUE);
  103. return;
  104. }
  105. }
  106. if (::IsWindow(m_pDlgParent->GetSafeHwnd()))
  107. {
  108. m_wndEditText.GetWindowText(m_strText);
  109. UpdateData(FALSE);
  110. if (m_bIsEdit)
  111. {
  112. m_pDlgParent->UpdateButtonMap(
  113. m_strText, m_nID, m_pWndCombo, FALSE);
  114. }
  115. UpdateData();
  116. if (m_pDlgParent->UpdateButtonMap(
  117. m_strText, m_nID, m_pWndCombo, TRUE))
  118. {
  119. CDialog::OnOK();
  120. }
  121. else
  122. {
  123. GetNextAvailableID(TRUE);
  124. }
  125. }
  126. }
  127. void CTaskEditButtonDlg::OnDestroy() 
  128. {
  129. CDialog::OnDestroy();
  130. // TODO: Add your message handler code here
  131. }