HMXCheckBox.cpp
上传用户:yinguanfa
上传日期:2022-02-19
资源大小:400k
文件大小:11k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // HMXCheckBox.cpp : implementation file
  2. //
  3. /********************************************************************
  4. created: 2001/10/25
  5. file: HMXCheckBox
  6. author: Massimo Colurcio
  7. homepage: http://www.softhor.com/developmentarea
  8. email: m.colurcio@softhor.com
  9. purpose: new kind of CListCtrl class
  10. special thanks to Davide Calabro' (tooltip from BtnST)
  11. *********************************************************************/
  12. #include "stdafx.h"
  13. #include "HMXCheckBox.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CHMXCheckBox
  21. CHMXCheckBox::CHMXCheckBox()
  22. {
  23. m_bEnableEditing = true;
  24. m_bTransparent = true;
  25. m_clrBkClr = ::GetSysColor(COLOR_WINDOW);
  26. m_clrTextClr = ::GetSysColor(COLOR_WINDOWTEXT);
  27. m_brsBkGnd.CreateSolidBrush(m_clrBkClr);
  28. m_brsHollow.CreateStockObject(HOLLOW_BRUSH);
  29. }
  30. CHMXCheckBox::~CHMXCheckBox()
  31. {
  32. m_brsBkGnd.DeleteObject();
  33. m_brsHollow.DeleteObject();
  34. m_fntText.DeleteObject();
  35. }
  36. BEGIN_MESSAGE_MAP(CHMXCheckBox, CButton)
  37. //{{AFX_MSG_MAP(CHMXCheckBox)
  38. ON_WM_CTLCOLOR_REFLECT()
  39. ON_WM_ERASEBKGND()
  40. //}}AFX_MSG_MAP
  41. END_MESSAGE_MAP()
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CHMXCheckBox message handlers
  44. HBRUSH CHMXCheckBox::CtlColor(CDC* pDC, UINT nCtlColor)
  45. {
  46. // TODO: Change any attributes of the DC here
  47. if( m_bTransparent )
  48.   pDC->SetBkMode( TRANSPARENT );
  49. else {
  50. pDC->SetBkMode( OPAQUE );
  51. pDC->SetBkColor(m_clrBkClr);
  52. }
  53. pDC->SetTextColor(m_clrTextClr);
  54. // TODO: Return a non-NULL brush if the parent's handler should not be called
  55. if( m_bTransparent )
  56. return (HBRUSH)m_brsHollow;
  57. else
  58. return (HBRUSH)m_brsBkGnd;
  59. }
  60. BOOL CHMXCheckBox::OnEraseBkgnd(CDC* pDC)
  61. {
  62. // TODO: Add your message handler code here and/or call default
  63. if( m_bTransparent )
  64. pDC->SetBkMode( TRANSPARENT );
  65. else
  66. pDC->SetBkColor(m_clrBkClr);
  67. return CButton::OnEraseBkgnd(pDC);
  68. }
  69. /////////////////////////////////////////////////////////////////////////////
  70. /********************************************************************
  71. created: 2001/10/25
  72. in: clr, bRedraw
  73. out: none
  74. return: always true;
  75. purpose: set background color
  76. *********************************************************************/
  77. bool CHMXCheckBox::SetBkClr(COLORREF clr)
  78. {
  79. m_clrBkClr = clr;
  80. m_brsBkGnd.DeleteObject();
  81. m_brsBkGnd.CreateSolidBrush(m_clrBkClr);
  82. Invalidate();
  83. return true;
  84. }
  85. /********************************************************************
  86. created: 2001/10/25
  87. in: none
  88. out: clr
  89. return: always true
  90. purpose: return background color
  91. *********************************************************************/
  92. bool CHMXCheckBox::GetBkClr(COLORREF & clr)
  93. {
  94. clr = m_clrBkClr;
  95. return true;
  96. }
  97. /********************************************************************
  98. created: 2001/10/25
  99. in: clr, bRedraw
  100. out: none
  101. return: always true;
  102. purpose: set Text color
  103. *********************************************************************/
  104. bool CHMXCheckBox::SetTextClr(COLORREF clr )
  105. {
  106. m_clrTextClr = clr;
  107. Invalidate();
  108. return true;
  109. }
  110. /********************************************************************
  111. created: 2001/10/25
  112. in: none
  113. out: clr
  114. return: always true
  115. purpose: get text color
  116. *********************************************************************/
  117. bool CHMXCheckBox::GetTextClr(COLORREF & clr)
  118. {
  119. clr = m_clrTextClr;
  120. return true;
  121. }
  122. /********************************************************************
  123. created: 2001/10/25
  124. in: nHeight, bBold, bItalic, sFaceName
  125. out: none
  126. return: always true
  127. purpose: set the font for the control
  128. *********************************************************************/
  129. bool CHMXCheckBox::SetTextFont( LONG nHeight, bool bBold, bool bItalic, const CString& sFaceName )
  130. {
  131. LOGFONT lgfnt;
  132. lgfnt.lfHeight = -MulDiv(nHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72);
  133. lgfnt.lfWidth = 0;
  134. lgfnt.lfEscapement = 0;
  135. lgfnt.lfOrientation = 0;
  136. lgfnt.lfWeight = bBold?FW_BOLD:FW_DONTCARE;
  137. lgfnt.lfItalic = bItalic?TRUE:FALSE;
  138. lgfnt.lfUnderline = FALSE;
  139. lgfnt.lfStrikeOut = FALSE;
  140. lgfnt.lfCharSet = DEFAULT_CHARSET;
  141. lgfnt.lfOutPrecision = OUT_DEFAULT_PRECIS;
  142. lgfnt.lfClipPrecision = CLIP_DEFAULT_PRECIS;
  143. lgfnt.lfQuality = DEFAULT_QUALITY;
  144. lgfnt.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
  145. strcpy( lgfnt.lfFaceName, sFaceName );
  146. return SetTextFont( lgfnt );
  147. }
  148. /********************************************************************
  149. created: 2001/10/25
  150. in: lgFont
  151. out: none
  152. return: always true
  153. purpose: set the font for the control
  154. *********************************************************************/
  155. bool CHMXCheckBox::SetTextFont( const LOGFONT& lgfnt )
  156. {
  157. m_fntText.DeleteObject();
  158. m_fntText.CreateFontIndirect( &lgfnt );
  159. SetFont( &m_fntText, TRUE );
  160. return true;
  161. }
  162. /********************************************************************
  163. created: 2001/10/25
  164. in: none
  165. out: lgFont
  166. return: always true
  167. purpose: get text font
  168. *********************************************************************/
  169. bool CHMXCheckBox::GetTextFont( LOGFONT* plgfnt)
  170. {
  171. GetFont()->GetObject( sizeof(LOGFONT), (void*)plgfnt);
  172. return true;
  173. }
  174. /********************************************************************
  175. created: 2001/10/25
  176. in: btransparent
  177. out: none
  178. return: always true
  179. purpose: make this control trasparent or not
  180. *********************************************************************/
  181. bool CHMXCheckBox::SetTransparent( bool bTransparent /* = true */)
  182. {
  183. m_bTransparent = bTransparent;
  184. Invalidate();
  185. return true;
  186. }
  187. /********************************************************************
  188. created: 2001/10/25
  189. in: none
  190. out: none
  191. return: true if trasparent
  192. purpose: is it transparent?
  193. *********************************************************************/
  194. bool CHMXCheckBox::GetTransparent()
  195. {
  196. return m_bTransparent;
  197. }
  198. /********************************************************************
  199. created: 2001/10/25
  200. in: bEditing
  201. out: none
  202. return: always true
  203. purpose: enable / diable editing
  204. *********************************************************************/
  205. bool CHMXCheckBox::EnableEditing(bool bEnableEditing)
  206. {
  207. m_bEnableEditing = bEnableEditing;
  208. return true;
  209. }
  210. LRESULT CHMXCheckBox::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  211. {
  212. // TODO: Add your specialized code here and/or call the base class
  213. if( !m_bEnableEditing )
  214. if( message == WM_LBUTTONDOWN || message == WM_LBUTTONDBLCLK || message == WM_KEYDOWN )
  215. return FALSE;
  216. return CButton::WindowProc(message, wParam, lParam);
  217. }
  218. /********************************************************************
  219. created: 2001/10/25
  220. in: bBold
  221. out: none
  222. return: always true
  223. purpose: set font bold
  224. *********************************************************************/
  225. bool CHMXCheckBox::SetFontBold( bool bBold )
  226. {
  227. LOGFONT lgfnt;
  228. GetTextFont( &lgfnt );
  229. lgfnt.lfWeight = bBold?FW_BOLD:FW_DONTCARE; 
  230. SetTextFont( lgfnt );
  231. return true;
  232. }
  233. /********************************************************************
  234. created: 2001/10/25
  235. in: bItalic
  236. out: none
  237. return: always true
  238. purpose: set the font italic
  239. *********************************************************************/
  240. bool CHMXCheckBox::SetFontItalic( bool bItalic )
  241. {
  242. LOGFONT lgfnt;
  243. GetTextFont( &lgfnt );
  244. lgfnt.lfItalic = bItalic ? TRUE : FALSE; 
  245. SetTextFont( lgfnt );
  246. return true;
  247. }
  248. /********************************************************************
  249. created: 2001/10/25
  250. in: nHeight
  251. out: none
  252. return: always true
  253. purpose: set the font height
  254. *********************************************************************/
  255. bool CHMXCheckBox::SetFontHeight( int nHeight )
  256. {
  257. LOGFONT lgfnt;
  258. GetTextFont( &lgfnt );
  259. lgfnt.lfHeight = -MulDiv(nHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72);    
  260. lgfnt.lfWidth = 0; 
  261. SetTextFont( lgfnt );
  262. return true;
  263. }
  264. /********************************************************************
  265. created: 2001/10/25
  266. in: sFaceName
  267. out: none
  268. return: always true
  269. purpose: set the font face name
  270. *********************************************************************/
  271. bool CHMXCheckBox::SetFontFaceName( const CString& sFaceName )
  272. {
  273. LOGFONT lgfnt;
  274. GetTextFont( &lgfnt );
  275. strcpy( lgfnt.lfFaceName, sFaceName );
  276. SetTextFont( lgfnt );
  277. return true;
  278. }
  279. /********************************************************************
  280. created: 2001/10/25
  281. in: none
  282. out: none
  283. return: always true
  284. purpose: init tooltip
  285. *********************************************************************/
  286. bool CHMXCheckBox::InitToolTip()
  287. {
  288. if (m_tt.m_hWnd == NULL) {
  289. m_tt.Create(this);
  290. m_tt.Activate(true);
  291. m_tt.SendMessage(TTM_SETMAXTIPWIDTH, 0, 400);
  292. }
  293. return true;
  294. }
  295. /********************************************************************
  296. created: 2001/10/25
  297. in: sText, bActivate
  298. out: none
  299. return: always true
  300. purpose: set tooltip text
  301. *********************************************************************/
  302. bool CHMXCheckBox::SetToolTipText(const CString& sText, bool bActivate)
  303. {
  304. InitToolTip(); 
  305. // If there is no tooltip defined then add it
  306. if (m_tt.GetToolCount() == 0)
  307. {
  308. CRect rect; 
  309. GetClientRect(rect);
  310. m_tt.AddTool(this, sText, rect, 1);
  311. }
  312. m_tt.UpdateTipText(sText, this, 1);
  313. m_tt.Activate(bActivate);
  314. return true;
  315. }
  316. /********************************************************************
  317. created: 2001/10/25
  318. in: bActivate
  319. out: none
  320. return: always true
  321. purpose: activate/deactivate tooltip
  322. *********************************************************************/
  323. bool CHMXCheckBox::ActivateToolTip(bool bActivate)
  324. {
  325. if (m_tt.GetToolCount() == 0)
  326. return false;
  327. // Activate tooltip
  328. m_tt.Activate(bActivate);
  329. return true;
  330. }
  331. /********************************************************************
  332. created: 2001/10/25
  333. in: see CWnd::PretanslateMessage
  334. out: see CWnd::PretanslateMessage
  335. return: see CWnd::PretanslateMessage
  336. purpose: let tooltip works
  337. *********************************************************************/
  338. BOOL CHMXCheckBox::PreTranslateMessage(MSG* pMsg) 
  339. {
  340. InitToolTip();
  341. m_tt.RelayEvent(pMsg);
  342. return CButton::PreTranslateMessage(pMsg);