OptionTreeCheckButton.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 6k
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 "OptionTreeCheckButton.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. // COptionTreeCheckButton
  32. COptionTreeCheckButton::COptionTreeCheckButton()
  33. {
  34. // Initialize variables
  35. m_strUnChecked = OT_CHECKBOX_DEFUNCHECKTEXT;
  36. m_strChecked = OT_CHECKBOX_DEFCHECKTEXT;
  37. m_bShowText = FALSE;
  38. m_bCheck = FALSE;
  39. m_bShowCheck = FALSE;
  40. m_rcCheck = CRect(0, 0, 0, 0);
  41. m_otCheckOption = NULL;
  42. m_dwOptions = NULL;
  43. }
  44. COptionTreeCheckButton::~COptionTreeCheckButton()
  45. {
  46. }
  47. BEGIN_MESSAGE_MAP(COptionTreeCheckButton, CWnd)
  48. //{{AFX_MSG_MAP(COptionTreeCheckButton)
  49. ON_WM_PAINT()
  50. ON_WM_ERASEBKGND()
  51. ON_WM_LBUTTONUP()
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // COptionTreeCheckButton message handlers
  56. void COptionTreeCheckButton::SetCheckText(CString strChecked, CString strUnChecked)
  57. {
  58. // Save variables
  59. m_strChecked = strChecked;
  60. m_strUnChecked = strUnChecked;
  61. }
  62. CString COptionTreeCheckButton::GetCheckedText()
  63. {
  64. // Return variables
  65. return m_strChecked;
  66. }
  67. CString COptionTreeCheckButton::GetUnCheckedText()
  68. {
  69. // Return variables
  70. return m_strUnChecked;
  71. }
  72. void COptionTreeCheckButton::OnPaint() 
  73. {
  74. // Make sure options aren't NULL
  75. if (m_otCheckOption == NULL)
  76. {
  77. return;
  78. }
  79. // Declare variables
  80. CPaintDC dc(this);
  81. CDC* pDCMem = new CDC;
  82. CBitmap bpMem;
  83. CBitmap *bmOld;
  84. COLORREF crOld;
  85. HGDIOBJ hOldBrush;
  86. int nOldBack;
  87. CRect rcText, rcCheck, rcClient;
  88. CString strText;
  89. HGDIOBJ hOld;
  90. // Get client rectangle
  91. GetClientRect(rcClient);
  92. // Create DC
  93. pDCMem->CreateCompatibleDC(&dc);
  94. // Create bitmap
  95. bpMem.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
  96. // Select bitmap
  97. bmOld = pDCMem->SelectObject(&bpMem);
  98. // Set background mode
  99. nOldBack = pDCMem->SetBkMode(TRANSPARENT);
  100. // Set text color
  101. crOld = pDCMem->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
  102. // Select font
  103. hOld = pDCMem->SelectObject(m_otCheckOption->GetNormalFont());
  104. // Draw control background
  105. if (m_otCheckOption->IsWindowEnabled() == FALSE)
  106. {
  107. hOldBrush = pDCMem->SelectObject(GetSysColorBrush(COLOR_BTNFACE));
  108. }
  109. else
  110. {
  111. hOldBrush = pDCMem->SelectObject(GetSysColorBrush(COLOR_WINDOW));
  112. }
  113. pDCMem->PatBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), PATCOPY);
  114. // Get rectangle
  115. rcCheck.left  = rcClient.left + 1;
  116. rcCheck.right = rcCheck.left + (long) OT_CHECKBOX_SIZE;
  117. rcCheck.top = rcClient.top + OT_SPACE - 1;
  118. rcCheck.bottom = rcCheck.top + (long) OT_CHECKBOX_SIZE;
  119. // Draw check
  120. if (GetCheck() == TRUE)
  121. {
  122. pDCMem->DrawFrameControl(&rcCheck, DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_CHECKED);
  123. }
  124. else
  125. {
  126. pDCMem->DrawFrameControl(&rcCheck, DFC_BUTTON, DFCS_BUTTONCHECK);
  127. }
  128. // Draw text
  129. if (GetOption(OT_CHECKBOX_SHOWTEXT) == TRUE)
  130. {
  131. // -- Get text
  132. if (GetCheck() == TRUE)
  133. {
  134. strText = GetCheckedText();
  135. }
  136. else
  137. {
  138. strText = GetUnCheckedText();
  139. }
  140. // -- Get rectangle
  141. rcText.left  = rcCheck.right + OT_SPACE;
  142. rcText.right = rcClient.right;
  143. rcText.top = rcClient.top;
  144. rcText.bottom = rcClient.bottom;
  145. // -- Draw text
  146. pDCMem->DrawText(strText, rcText, DT_SINGLELINE | DT_VCENTER);
  147. }
  148. // Save check rectangle
  149. m_rcCheck = rcCheck;
  150. if (GetOption(OT_CHECKBOX_SHOWTEXT) == TRUE)
  151. {
  152. m_rcCheck.right = rcText.right;
  153. }
  154. // Copy to screen
  155. dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), pDCMem, 0, 0, SRCCOPY);
  156. // Restore GDI ojects
  157. pDCMem->SelectObject(bmOld);
  158. pDCMem->SelectObject(hOldBrush);
  159. pDCMem->SetBkMode(nOldBack);
  160. pDCMem->SelectObject(hOld);
  161. pDCMem->SetTextColor(crOld);
  162. // Delete objects
  163. if (pDCMem->GetSafeHdc() != NULL)
  164. {
  165. pDCMem->DeleteDC();
  166. }
  167. delete pDCMem;
  168. if (bpMem.GetSafeHandle() != NULL)
  169. {
  170. bpMem.DeleteObject();
  171. }
  172. }
  173. BOOL COptionTreeCheckButton::OnEraseBkgnd(CDC* pDC) 
  174. {
  175. // Naa, we like flicker free better
  176. return FALSE;
  177. }
  178. void COptionTreeCheckButton::SetCheck(BOOL bCheck)
  179. {
  180. // Set variable
  181. m_bCheck = bCheck;
  182. }
  183. BOOL COptionTreeCheckButton::GetCheck()
  184. {
  185. // Return check
  186. return m_bCheck;
  187. }
  188. void COptionTreeCheckButton::OnLButtonUp(UINT nFlags, CPoint point) 
  189. {
  190. // See if check was pressed
  191. if (m_rcCheck.PtInRect(point) == TRUE)
  192. {
  193. // -- Reverse check
  194. SetCheck(!GetCheck());
  195. // -- Force redraw
  196. Invalidate();
  197. // -- Update window
  198. UpdateWindow();
  199. }
  200. CWnd::OnLButtonUp(nFlags, point);
  201. }
  202. void COptionTreeCheckButton::SetCheckOptionsOwner(COptionTree *otOption)
  203. {
  204. // Save pointer
  205. m_otCheckOption = otOption;
  206. }
  207. BOOL COptionTreeCheckButton::GetOption(DWORD dwOption)
  208. {
  209. // Return option
  210. return (m_dwOptions & dwOption) ? TRUE : FALSE;
  211. }
  212. void COptionTreeCheckButton::SetOption(DWORD dwOption, BOOL bSet)
  213. {
  214. // Set option
  215. if (bSet == TRUE)
  216. {
  217. m_dwOptions |= dwOption;
  218. }
  219. else
  220. {
  221. m_dwOptions &= ~dwOption;
  222. }
  223. }