FORMATTA.CPP
上传用户:aakk678
上传日期:2022-07-09
资源大小:406k
文件大小:6k
源码类别:

界面编程

开发平台:

Visual C++

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