OptionTreeItemCheckBox.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 7k
Category:

Graph program

Development Platform:

Visual C++

  1. // COptionTree
  2. //
  3. // License
  4. // -------
  5. // This code is provided "as is" with no expressed or implied warranty.
  6. // 
  7. // You may use this code in a commercial product with or without acknowledgement.
  8. // However you may not sell this code or any modification of this code, this includes 
  9. // commercial libraries and anything else for profit.
  10. //
  11. // I would appreciate a notification of any bugs or bug fixes to help the control grow.
  12. //
  13. // History:
  14. // --------
  15. // See License.txt for full history information.
  16. //
  17. //
  18. // Copyright (c) 1999-2002 
  19. // ComputerSmarts.net 
  20. // mattrmiller@computersmarts.net
  21. #include "stdafx.h"
  22. #include "OptionTreeItemCheckBox.h"
  23. // Added Headers
  24. #include "OptionTree.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. /////////////////////////////////////////////////////////////////////////////
  31. // COptionTreeItemCheckBox
  32. COptionTreeItemCheckBox::COptionTreeItemCheckBox()
  33. {
  34. // Initialize variables
  35. m_bFocus = FALSE;
  36. m_rcCheck = CRect(0, 0, 0, 0);
  37. // Set item type
  38. SetItemType(OT_ITEM_CHECKBOX);
  39. }
  40. COptionTreeItemCheckBox::~COptionTreeItemCheckBox()
  41. {
  42. }
  43. BEGIN_MESSAGE_MAP(COptionTreeItemCheckBox, COptionTreeCheckButton)
  44. //{{AFX_MSG_MAP(COptionTreeItemCheckBox)
  45. ON_WM_KILLFOCUS()
  46. ON_WM_SETFOCUS()
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // COptionTreeItemCheckBox message handlers
  51. void COptionTreeItemCheckBox::DrawAttribute(CDC *pDC, const RECT &rcRect)
  52. {
  53. // If we don't have focus, text is drawn.
  54. if (m_bFocus == TRUE)
  55. {
  56. return;
  57. }
  58. // Make sure options aren't NULL
  59. if (m_otOption == NULL)
  60. {
  61. return;
  62. }
  63. // Make sure there is a window
  64. if (!IsWindow(GetSafeHwnd()))
  65. {
  66. return;
  67. }
  68. // Set window position
  69. if (IsWindow(GetSafeHwnd()))
  70. {
  71. MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
  72. }
  73. // Declare variables
  74. HGDIOBJ hOld;
  75. COLORREF crOld;
  76. int nOldBack;
  77. CRect rcText, rcCheck;
  78. CString strText;
  79. COLORREF crOldBack;
  80. // Select font
  81. hOld = pDC->SelectObject(m_otOption->GetNormalFont());
  82. // Set text color
  83. if (IsReadOnly() == TRUE || m_otOption->IsWindowEnabled() == FALSE)
  84. {
  85. crOld = pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));
  86. }
  87. else
  88. {
  89. crOld = pDC->SetTextColor(GetTextColor());
  90. }
  91. // Set background mode
  92. nOldBack = pDC->SetBkMode(TRANSPARENT);
  93. // Set background color
  94. crOldBack = pDC->SetBkColor(GetBackgroundColor());
  95. // Draw check box
  96. if (GetOption(OT_CHECKBOX_SHOWCHECK) == TRUE)
  97. {
  98. // -- Get rectangle
  99. rcCheck.left  = rcRect.left;
  100. rcCheck.right = rcCheck.left + (long) OT_CHECKBOX_SIZE;
  101. rcCheck.top = rcRect.top + OT_SPACE - 2;
  102. rcCheck.bottom = rcCheck.top + (long) OT_CHECKBOX_SIZE;
  103. // -- Draw check
  104. if (GetCheck() == TRUE)
  105. {
  106. pDC->DrawFrameControl(&rcCheck, DFC_BUTTON, DFCS_FLAT | DFCS_BUTTONCHECK | DFCS_CHECKED);
  107. }
  108. else
  109. {
  110. pDC->DrawFrameControl(&rcCheck, DFC_BUTTON, DFCS_FLAT | DFCS_BUTTONCHECK);
  111. }
  112. }
  113. // Draw text
  114. if (GetOption(OT_CHECKBOX_SHOWTEXT) == TRUE)
  115. {
  116. // -- Get text
  117. if (GetCheck() == TRUE)
  118. {
  119. strText = GetCheckedText();
  120. }
  121. else
  122. {
  123. strText = GetUnCheckedText();
  124. }
  125. // -- Get rectangle
  126. if (GetOption(OT_CHECKBOX_SHOWCHECK) == TRUE)
  127. {
  128. rcText.left  = rcCheck.right + OT_SPACE;
  129. rcText.right = rcRect.right;
  130. rcText.top = rcRect.top;
  131. rcText.bottom = rcRect.bottom;
  132. }
  133. else
  134. {
  135. rcText  = rcRect;
  136. }
  137. // -- Draw text
  138. pDC->DrawText(strText, rcText, DT_SINGLELINE | DT_VCENTER);
  139. }
  140. // Restore GDI ojects
  141. pDC->SelectObject(hOld);
  142. pDC->SetTextColor(crOld);
  143. pDC->SetBkMode(nOldBack);
  144. pDC->SetBkColor(crOldBack);
  145. }
  146. void COptionTreeItemCheckBox::OnCommit()
  147. {
  148. // Hide edit control
  149. if (IsWindow(GetSafeHwnd()))
  150. {
  151. // -- Show window
  152. ShowWindow(SW_HIDE);
  153. }
  154. }
  155. void COptionTreeItemCheckBox::OnRefresh()
  156. {
  157. // Set the window positiion
  158. if (IsWindow(GetSafeHwnd()))
  159. {
  160. MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
  161. }
  162. }
  163. void COptionTreeItemCheckBox::OnMove()
  164. {
  165. // Set window position
  166. if (IsWindow(GetSafeHwnd()))
  167. {
  168. MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
  169. }
  170. // Hide window
  171. if (m_bFocus == FALSE && IsWindow(GetSafeHwnd()))
  172. {
  173. // -- Show window
  174. ShowWindow(SW_HIDE);
  175. }
  176. }
  177. void COptionTreeItemCheckBox::OnActivate()
  178. {
  179. // Make sure window is valid
  180. if (IsWindow(GetSafeHwnd()))
  181. {
  182. // -- Show window
  183. ShowWindow(SW_SHOW);
  184. // -- Set window position
  185. MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
  186. // -- Set focus
  187. SetFocus();
  188. }
  189. }
  190. void COptionTreeItemCheckBox::OnSetFocus(CWnd* pOldWnd) 
  191. {
  192. // Mark focus
  193. m_bFocus = TRUE;
  194. COptionTreeCheckButton::OnSetFocus(pOldWnd);
  195. }
  196. void COptionTreeItemCheckBox::OnKillFocus(CWnd* pNewWnd) 
  197. {
  198. // Validate
  199. if (m_otOption == NULL)
  200. {
  201. COptionTreeCheckButton::OnKillFocus(pNewWnd);
  202. return;
  203. }
  204. // See if new window is tree of list
  205. if (m_otOption->IsChild(pNewWnd) == TRUE)
  206. {
  207. // -- Mark focus
  208. m_bFocus = FALSE;
  209. // -- Commit changes
  210. CommitChanges();
  211. }
  212. COptionTreeCheckButton::OnKillFocus(pNewWnd);
  213. }
  214. void COptionTreeItemCheckBox::CleanDestroyWindow()
  215. {
  216. // Destroy window
  217. if (IsWindow(GetSafeHwnd()))
  218. {
  219. // -- Destroy window
  220. DestroyWindow();
  221. }
  222. }
  223. BOOL COptionTreeItemCheckBox::CreateCheckBoxItem(BOOL bChecked, DWORD dwOptions)
  224. {
  225. // Declare variables
  226. DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
  227. BOOL bRet = FALSE;
  228. // Make sure options is not NULL
  229. if (m_otOption == NULL)
  230. {
  231. return FALSE;
  232. }
  233. // Create edit control
  234. if (!IsWindow(GetSafeHwnd()))
  235. {
  236. // -- Create the edit view
  237. bRet = Create(AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, ::LoadCursor(NULL, IDC_ARROW)), _T(""), dwStyle, m_rcAttribute, m_otOption->GetCtrlParent(), GetCtrlID());
  238. // -- Setup window
  239. if (bRet == TRUE)
  240. {
  241. // -- -- Set font
  242. SetFont(m_otOption->GetNormalFont(), TRUE);
  243. // -- -- Save options
  244. m_dwOptions = dwOptions;
  245. // -- -- Set check
  246. SetCheck(bChecked);
  247. // -- Set check options owner
  248. SetCheckOptionsOwner(m_otOption);
  249. // -- -- Set window position
  250. MoveWindow(m_rcAttribute.left, m_rcAttribute.top, m_rcAttribute.Width(), m_rcAttribute.Height());
  251. // -- -- Hide window
  252. ShowWindow(SW_HIDE);
  253. }
  254. }
  255. return bRet;
  256. }
  257. void COptionTreeItemCheckBox::OnDeSelect()
  258. {
  259. // Commit changes
  260. CommitChanges();
  261. }
  262. void COptionTreeItemCheckBox::OnSelect()
  263. {
  264. // Commit changes
  265. CommitChanges();
  266. }