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

对话框与窗口

开发平台:

Visual C++

  1. // ExcelTabProperties.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ExcelTab.h"
  5. #include "ExcelTabProperties.h"
  6. #include "ExcelEditCtrl.h"
  7. #include "ExcelTabDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. template <class T>
  14. class CAutoDestructCtrl : public T
  15. {
  16. protected:
  17. virtual void PostNcDestroy()
  18. {
  19. delete this;
  20. }
  21. };
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CExcelTabProperties dialog
  24. CExcelTabProperties::CExcelTabProperties(BOOL& bBottom, BOOL& bHasArrows, BOOL& bHasHomeEnd, BOOL& bHScroll, CExcelTabDlg* pParent /*=NULL*/)
  25. : CDialog(CExcelTabProperties::IDD, pParent)
  26. , m_bBottom(bBottom)
  27. , m_bHasArrows(bHasArrows)
  28. , m_bHasHomeEnd(bHasHomeEnd)
  29. , m_bHScroll(bHScroll)
  30. , m_pParentWnd(pParent)
  31. , m_pExcelTabCtrl(m_pParentWnd->m_pExcelTabCtrl)
  32. {
  33. //{{AFX_DATA_INIT(CExcelTabProperties)
  34. m_iTabNum = 0;
  35. m_csText = _T("");
  36. //}}AFX_DATA_INIT
  37. // default values
  38. m_crBack = m_pExcelTabCtrl->GetTabBackColor();
  39. m_crText = m_pExcelTabCtrl->GetTabTextColor();
  40. m_crSelBack = m_pExcelTabCtrl->GetSelTabBackColor();
  41. m_crSelText = m_pExcelTabCtrl->GetSelTabTextColor();
  42. }
  43. void CExcelTabProperties::DoDataExchange(CDataExchange* pDX)
  44. {
  45. const int nTabs = m_pExcelTabCtrl->GetItemCount() - 1;
  46. CDialog::DoDataExchange(pDX);
  47. //{{AFX_DATA_MAP(CExcelTabProperties)
  48. DDX_Control(pDX, IDC_CLR_SELTEXT, m_cpSelText);
  49. DDX_Control(pDX, IDC_CLR_TEXT, m_cpText);
  50. DDX_Control(pDX, IDC_CLR_SELBACK, m_cpSelBack);
  51. DDX_Control(pDX, IDC_CLR_BACK, m_cpBack);
  52. DDX_Control(pDX, IDC_MODIFY_TAB, m_btnModifyTab);
  53. DDX_Control(pDX, IDC_DELETE_TAB, m_btnDeleteTab);
  54. DDX_Control(pDX, IDC_DELETE_ALL, m_btnDeleteAll);
  55. DDX_Control(pDX, IDC_ADD_TAB, m_btnAddTab);
  56. DDX_Text(pDX, IDC_TAB_NUM, m_iTabNum);
  57. DDV_MinMaxUInt(pDX, m_iTabNum, 0, nTabs);
  58. DDX_Text(pDX, IDC_TEXT, m_csText);
  59. DDX_Check(pDX, IDC_FTS_XT_BOTTOM, m_bBottom);
  60. DDX_Check(pDX, IDC_FTS_XT_HASARROWS, m_bHasArrows);
  61. DDX_Check(pDX, IDC_FTS_XT_HASHOMEEND, m_bHasHomeEnd);
  62. DDX_Check(pDX, IDC_FTS_XT_HSCROLL, m_bHScroll);
  63. //}}AFX_DATA_MAP
  64. DDX_XTColorPicker(pDX, IDC_CLR_TEXT, m_crText);
  65. DDX_XTColorPicker(pDX, IDC_CLR_BACK, m_crBack);
  66. DDX_XTColorPicker(pDX, IDC_CLR_SELTEXT, m_crSelText);
  67. DDX_XTColorPicker(pDX, IDC_CLR_SELBACK, m_crSelBack);
  68. }
  69. BEGIN_MESSAGE_MAP(CExcelTabProperties, CDialog)
  70. //{{AFX_MSG_MAP(CExcelTabProperties)
  71. ON_BN_CLICKED(IDC_FTS_XT_BOTTOM, OnFtsXtBottom)
  72. ON_BN_CLICKED(IDC_FTS_XT_HASARROWS, OnFtsXtHasarrows)
  73. ON_BN_CLICKED(IDC_FTS_XT_HASHOMEEND, OnFtsXtHashomeend)
  74. ON_BN_CLICKED(IDC_FTS_XT_HSCROLL, OnFtsXtHscroll)
  75. ON_BN_CLICKED(IDC_ADD_TAB, OnAddTab)
  76. ON_BN_CLICKED(IDC_DELETE_ALL, OnDeleteAll)
  77. ON_BN_CLICKED(IDC_DELETE_TAB, OnDeleteTab)
  78. ON_BN_CLICKED(IDC_MODIFY_TAB, OnModifyTab)
  79. ON_EN_CHANGE(IDC_TEXT, OnChangeText)
  80. ON_EN_CHANGE(IDC_TAB_NUM, OnChangeTabNum)
  81. //}}AFX_MSG_MAP
  82. ON_CPN_XT_SELENDOK(IDC_CLR_TEXT, OnSelEndOkTextClr)
  83. ON_CPN_XT_SELENDOK(IDC_CLR_BACK, OnSelEndOkBackClr)
  84. ON_CPN_XT_SELENDOK(IDC_CLR_SELTEXT, OnSelEndOkSelTextClr)
  85. ON_CPN_XT_SELENDOK(IDC_CLR_SELBACK, OnSelEndOkSelBackClr)
  86. END_MESSAGE_MAP()
  87. /////////////////////////////////////////////////////////////////////////////
  88. // CExcelTabProperties message handlers
  89. void CExcelTabProperties::OnFtsXtBottom() 
  90. {
  91. UpdateData();
  92. m_pParentWnd->UpdateExcelTab();
  93. }
  94. void CExcelTabProperties::OnFtsXtHasarrows() 
  95. {
  96. UpdateData();
  97. m_pParentWnd->UpdateExcelTab();
  98. GetDlgItem(IDC_FTS_XT_HASHOMEEND)->EnableWindow(m_bHasArrows);
  99. }
  100. void CExcelTabProperties::OnFtsXtHashomeend() 
  101. {
  102. UpdateData();
  103. m_pParentWnd->UpdateExcelTab();
  104. }
  105. void CExcelTabProperties::OnFtsXtHscroll() 
  106. {
  107. UpdateData();
  108. m_pParentWnd->UpdateExcelTab();
  109. }
  110. void CExcelTabProperties::OnAddTab()
  111. {
  112. if (UpdateData())
  113. {
  114. CAutoDestructCtrl<CExcelEditCtrl> *pSheet = new CAutoDestructCtrl<CExcelEditCtrl>();
  115. pSheet->Create(WS_CHILD | WS_TABSTOP | WS_CLIPCHILDREN |
  116. WS_HSCROLL | WS_VSCROLL | ES_MULTILINE, CXTPEmptyRect(), m_pExcelTabCtrl, 1000);
  117. pSheet->SetWindowText(m_csText);
  118. m_pExcelTabCtrl->InsertItem(m_iTabNum, m_csText, pSheet);
  119. }
  120. UpdateDlgStatus();
  121. }
  122. void CExcelTabProperties::OnDeleteAll()
  123. {
  124. m_pExcelTabCtrl->DeleteAllItems();
  125. UpdateDlgStatus();
  126. }
  127. void CExcelTabProperties::OnDeleteTab()
  128. {
  129. if (m_pExcelTabCtrl->GetItemCount() > 0  &&  UpdateData())
  130. {
  131. m_pExcelTabCtrl->DeleteItem(m_iTabNum);
  132. }
  133. UpdateDlgStatus();
  134. }
  135. void CExcelTabProperties::OnModifyTab()
  136. {
  137. if (m_pExcelTabCtrl->GetItemCount() > 0  &&  UpdateData())
  138. {
  139. m_pExcelTabCtrl->SetItemText(m_iTabNum, m_csText);
  140. }
  141. UpdateDlgStatus();
  142. }
  143. void CExcelTabProperties::UpdateDlgStatus()
  144. {
  145. const bool bHasTabs = (m_pExcelTabCtrl->GetItemCount() > 0);
  146. m_btnModifyTab.EnableWindow(bHasTabs);
  147. m_btnDeleteTab.EnableWindow(bHasTabs);
  148. m_btnModifyTab.EnableWindow(bHasTabs);
  149. }
  150. void CExcelTabProperties::OnChangeText() 
  151. {
  152. UpdateData();
  153. m_btnAddTab.EnableWindow(!m_csText.IsEmpty());
  154. }
  155. void CExcelTabProperties::OnSelEndOkTextClr()
  156. {
  157. UpdateData();
  158. m_pExcelTabCtrl->SetTabTextColor(m_iTabNum, m_crText);
  159. }
  160. void CExcelTabProperties::OnSelEndOkBackClr()
  161. {
  162. UpdateData();
  163. m_pExcelTabCtrl->SetTabBackColor(m_iTabNum, m_crBack);
  164. }
  165. void CExcelTabProperties::OnSelEndOkSelTextClr()
  166. {
  167. UpdateData();
  168. m_pExcelTabCtrl->SetSelTabTextColor(m_iTabNum, m_crSelText);
  169. }
  170. void CExcelTabProperties::OnSelEndOkSelBackClr()
  171. {
  172. UpdateData();
  173. m_pExcelTabCtrl->SetSelTabBackColor(m_iTabNum, m_crSelBack);
  174. }
  175. void CExcelTabProperties::OnChangeTabNum() 
  176. {
  177. UpdateData();
  178. if (m_iTabNum < m_pExcelTabCtrl->GetItemCount())
  179. {
  180. m_crBack = m_pExcelTabCtrl->GetTabBackColor(m_iTabNum);
  181. m_crText = m_pExcelTabCtrl->GetTabTextColor(m_iTabNum);
  182. m_crSelBack = m_pExcelTabCtrl->GetSelTabBackColor(m_iTabNum);
  183. m_crSelText = m_pExcelTabCtrl->GetSelTabTextColor(m_iTabNum);
  184. m_csText = m_pExcelTabCtrl->GetItemText(m_iTabNum);
  185. }
  186. UpdateData(FALSE);
  187. }
  188. BOOL CExcelTabProperties::OnInitDialog() 
  189. {
  190. CDialog::OnInitDialog();
  191. // set default values for color pickers.
  192. m_cpBack.SetDefaultColor(m_crBack);
  193. m_cpText.SetDefaultColor(m_crText);
  194. m_cpSelBack.SetDefaultColor(m_crSelBack);
  195. m_cpSelText.SetDefaultColor(m_crSelText);
  196. OnChangeTabNum();
  197. return TRUE;  // return TRUE unless you set the focus to a control
  198.               // EXCEPTION: OCX Property Pages should return FALSE
  199. }