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

对话框与窗口

开发平台:

Visual C++

  1. // formatta.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "wordpad.h"
  22. #include "formatta.h"
  23. #include "ddxm.h"
  24. #include "helpids.h"
  25. #ifdef _DEBUG
  26. #undef THIS_FILE
  27. static char BASED_CODE THIS_FILE[] = __FILE__;
  28. #endif
  29. const DWORD CFormatTabDlg::m_nHelpIDs[] =
  30. {
  31. IDC_BUTTON_SET, IDH_WORDPAD_TABSET,
  32. IDC_BUTTON_CLEAR, IDH_WORDPAD_TABCLEAR,
  33. IDC_BUTTON_CLEARALL, IDH_WORDPAD_TAB_CLEARALL,
  34. IDC_COMBO1, IDH_WORDPAD_TABSTOPS,
  35. IDC_BOX, IDH_COMM_GROUPBOX,
  36. 0, 0
  37. };
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CFormatTabDlg dialog
  40. CFormatTabDlg::CFormatTabDlg(PARAFORMAT& pf, CWnd* pParent /*=NULL*/)
  41. : CCSDialog(CFormatTabDlg::IDD, pParent)
  42. {
  43. m_pf = pf;
  44. m_tabarray = new LONG[MAX_TAB_STOPS];
  45. m_nCount = 0;
  46. if (m_pf.dwMask & PFM_TABSTOPS)
  47. {
  48. m_nCount = m_pf.cTabCount;
  49. ASSERT(m_pf.cTabCount <= MAX_TAB_STOPS);
  50. for (int i=0;i<m_pf.cTabCount;i++)
  51. m_tabarray[i] = m_pf.rgxTabs[i];
  52. }
  53. //{{AFX_DATA_INIT(CFormatTabDlg)
  54. //}}AFX_DATA_INIT
  55. }
  56. CFormatTabDlg::~CFormatTabDlg()
  57. {
  58. delete [] m_tabarray;
  59. }
  60. void CFormatTabDlg::DoDataExchange(CDataExchange* pDX)
  61. {
  62. CCSDialog::DoDataExchange(pDX);
  63. //{{AFX_DATA_MAP(CFormatTabDlg)
  64. DDX_Control(pDX, IDC_BUTTON_CLEARALL, m_buttonClearAll);
  65. DDX_Control(pDX, IDC_BUTTON_SET, m_buttonSet);
  66. DDX_Control(pDX, IDC_BUTTON_CLEAR, m_buttonClear);
  67. DDX_Control(pDX, IDC_COMBO1, m_comboBox);
  68. //}}AFX_DATA_MAP
  69. if (!pDX->m_bSaveAndValidate)
  70. UpdateListBox();
  71. }
  72. BEGIN_MESSAGE_MAP(CFormatTabDlg, CCSDialog)
  73. //{{AFX_MSG_MAP(CFormatTabDlg)
  74. ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClickedClear)
  75. ON_BN_CLICKED(IDC_BUTTON_CLEARALL, OnClickedClearAll)
  76. ON_BN_CLICKED(IDC_BUTTON_SET, OnClickedSet)
  77. ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditChange)
  78. ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchange)
  79. //}}AFX_MSG_MAP
  80. END_MESSAGE_MAP()
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CFormatTabDlg message handlers
  83. void CFormatTabDlg::OnClickedClear()
  84. {
  85. int nTab;
  86. int nSel = m_comboBox.GetCurSel();
  87. if (nSel == CB_ERR)
  88. {
  89. CDataExchange dx(this, TRUE);
  90. DDX_Twips(&dx, IDC_COMBO1, nTab);
  91. DDV_MinMaxTwips(&dx, nTab, 0, 31680);
  92. if (nTab != DDXM_BLANK)
  93. {
  94. if (RemoveTabFromArray(nTab))
  95. UpdateListBox();
  96. }
  97. }
  98. else
  99. {
  100. ASSERT(nSel < m_nCount);
  101. RemoveTabFromArrayByIndex(nSel);
  102. UpdateListBox();
  103. }
  104. UpdateButtons();
  105. SetEditFocus();
  106. }
  107. void CFormatTabDlg::OnClickedClearAll()
  108. {
  109. m_nCount = 0;
  110. m_comboBox.ResetContent();
  111. UpdateButtons();
  112. SetEditFocus();
  113. }
  114. void CFormatTabDlg::OnClickedSet()
  115. {
  116. Set();
  117. UpdateButtons();
  118. SetEditFocus();
  119. }
  120. BOOL CFormatTabDlg::Set()
  121. {
  122. int nTab;
  123. CDataExchange dx(this, TRUE);
  124. DDX_Twips(&dx, IDC_COMBO1, nTab);
  125. DDV_MinMaxTwips(&dx, nTab, 0, 31680);
  126. if (nTab != DDXM_BLANK)
  127. {
  128. if (m_nCount == MAX_TAB_STOPS)
  129. {
  130. AfxMessageBox(IDS_NOMORETABS);
  131. m_comboBox.Clear();
  132. return FALSE;
  133. }
  134. if (AddTabToArray(nTab))
  135. UpdateListBox();
  136. return TRUE;
  137. }
  138. return FALSE;
  139. }
  140. void CFormatTabDlg::SetEditFocus()
  141. {
  142. m_comboBox.SetFocus();
  143. m_comboBox.SetEditSel(0,-1);
  144. }
  145. BOOL CFormatTabDlg::RemoveTabFromArray(LONG lTab)
  146. {
  147. int i;
  148. for (i=0;i<m_nCount;i++)
  149. {
  150. if (m_tabarray[i] == lTab)
  151. {
  152. RemoveTabFromArrayByIndex(i);
  153. return TRUE;
  154. }
  155. }
  156. return FALSE;
  157. }
  158. void CFormatTabDlg::RemoveTabFromArrayByIndex(int nIndex)
  159. {
  160. MEMMOVE_S(&m_tabarray[nIndex], &m_tabarray[nIndex+1],
  161. (m_nCount-nIndex-1)*sizeof(LONG));
  162. m_nCount--;
  163. }
  164. BOOL CFormatTabDlg::AddTabToArray(LONG lTab)
  165. {
  166. int i;
  167. BOOL bInsert = FALSE;
  168. LONG lTemp;
  169. for (i=0;i<m_nCount;i++)
  170. {
  171. if (!bInsert && lTab < m_tabarray[i])
  172. bInsert = TRUE;
  173. else if (lTab == m_tabarray[i]) // we don't want repeats
  174. return FALSE;
  175. if (bInsert)
  176. {
  177. lTemp = m_tabarray[i];
  178. m_tabarray[i] = lTab;
  179. lTab = lTemp;
  180. }
  181. }
  182. m_tabarray[m_nCount++] = lTab;
  183. return TRUE;
  184. }
  185. void CFormatTabDlg::UpdateListBox()
  186. {
  187. int i;
  188. TCHAR szT[64];
  189. ASSERT(m_nCount >= 0);
  190. m_comboBox.ResetContent();
  191. for (i=0;i<m_nCount;i++)
  192. {
  193. theApp.PrintTwips(szT, m_tabarray[i], 2);
  194. m_comboBox.AddString(szT);
  195. }
  196. }
  197. void CFormatTabDlg::OnOK()
  198. {
  199. if (m_buttonSet.IsWindowEnabled())
  200. {
  201. if (!Set())
  202. return;
  203. }
  204. CCSDialog::OnOK();
  205. m_pf.cTabCount = (SHORT) m_nCount;
  206. for (int i=0;i<m_nCount;i++)
  207. m_pf.rgxTabs[i] = m_tabarray[i];
  208. m_pf.dwMask = PFM_TABSTOPS;
  209. }
  210. void CFormatTabDlg::OnEditChange()
  211. {
  212. UpdateButtons();
  213. }
  214. void CFormatTabDlg::UpdateButton(CButton& button, BOOL b)
  215. {
  216. if (b != button.IsWindowEnabled())
  217. button.EnableWindow(b);
  218. }
  219. void CFormatTabDlg::UpdateButtons()
  220. {
  221. UpdateButton(m_buttonClearAll, m_nCount > 0);
  222. BOOL bHasText = (m_comboBox.GetWindowTextLength() > 0);
  223. UpdateButton(m_buttonSet, bHasText);
  224. UpdateButton(m_buttonClear, bHasText);
  225. WORD wID = LOWORD(GetDefID());
  226. if (bHasText && wID != IDC_BUTTON_SET)
  227. SetDefID(IDC_BUTTON_SET);
  228. else if (!bHasText && wID != IDOK)
  229. SetDefID(IDOK);
  230. }
  231. BOOL CFormatTabDlg::OnInitDialog()
  232. {
  233. CCSDialog::OnInitDialog();
  234. UpdateButtons();
  235. return TRUE;  // return TRUE unless you set the focus to a control
  236.               // EXCEPTION: OCX Property Pages should return FALSE
  237. }
  238. void CFormatTabDlg::OnSelchange()
  239. {
  240. UpdateButton(m_buttonClearAll, m_nCount > 0);
  241. // force these since if the edit control is empty and
  242. // an item in the box is clicked on, the edit control will
  243. // not be filled in first
  244. UpdateButton(m_buttonSet, TRUE);
  245. UpdateButton(m_buttonClear, TRUE);
  246. WORD wID = LOWORD(GetDefID());
  247. if (wID != IDC_BUTTON_SET)
  248. SetDefID(IDC_BUTTON_SET);
  249. }