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

ListView/ListBox

开发平台:

Visual C++

  1. // HMXListCtrl.cpp : implementation file
  2. //
  3. /********************************************************************
  4. created: 2001/10/25
  5. file: HMXListCtrl
  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 "HMXListCtrl.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CHMXListCtrl
  21. CHMXListCtrl::CHMXListCtrl()
  22. {
  23. m_bEnableEditing = true;
  24. m_clrBkClr = GetSysColor(COLOR_WINDOW);
  25. m_clrTextClr = GetSysColor(COLOR_WINDOWTEXT);
  26. }
  27. CHMXListCtrl::~CHMXListCtrl()
  28. {
  29. m_fntText.DeleteObject();
  30. }
  31. BEGIN_MESSAGE_MAP(CHMXListCtrl, CListCtrl)
  32. //{{AFX_MSG_MAP(CHMXListCtrl)
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CHMXListCtrl message handlers
  37. /********************************************************************
  38. created: 2001/10/25
  39. in: clr, bRedraw
  40. out: none
  41. return: always true;
  42. purpose: set background color
  43. *********************************************************************/
  44. bool CHMXListCtrl::SetBkClr(COLORREF clr)
  45. {
  46. m_clrBkClr = clr;
  47. SetBkColor( m_clrBkClr );
  48. SetTextBkColor( m_clrBkClr );
  49. return true;
  50. }
  51. /********************************************************************
  52. created: 2001/10/25
  53. in: none
  54. out: clr
  55. return: always true
  56. purpose: return background color
  57. *********************************************************************/
  58. bool CHMXListCtrl::GetBkClr(COLORREF & clr)
  59. {
  60. clr = m_clrBkClr;
  61. return true;
  62. }
  63. /********************************************************************
  64. created: 2001/10/25
  65. in: clr, bRedraw
  66. out: none
  67. return: always true;
  68. purpose: set Text color
  69. *********************************************************************/
  70. bool CHMXListCtrl::SetTextClr(COLORREF clr)
  71. {
  72. m_clrTextClr = clr;
  73. SetTextColor( m_clrTextClr );
  74. return true;
  75. }
  76. /********************************************************************
  77. created: 2001/10/25
  78. in: none
  79. out: clr
  80. return: always true
  81. purpose: get text color
  82. *********************************************************************/
  83. bool CHMXListCtrl::GetTextClr(COLORREF & clr)
  84. {
  85. clr = m_clrTextClr;
  86. return true;
  87. }
  88. /********************************************************************
  89. created: 2001/10/25
  90. in: nHeight, bBold, bItalic, sFaceName
  91. out: none
  92. return: always true
  93. purpose: set the font for the control
  94. *********************************************************************/
  95. bool CHMXListCtrl::SetTextFont( LONG nHeight, bool bBold, bool bItalic, const CString& sFaceName )
  96. {
  97. LOGFONT lgfnt;
  98. lgfnt.lfHeight = -MulDiv(nHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72);    
  99. lgfnt.lfWidth = 0; 
  100. lgfnt.lfEscapement = 0;    
  101. lgfnt.lfOrientation = 0;    
  102. lgfnt.lfWeight = bBold?FW_BOLD:FW_DONTCARE; 
  103. lgfnt.lfItalic = bItalic?TRUE:FALSE;    
  104. lgfnt.lfUnderline = FALSE;    
  105. lgfnt.lfStrikeOut = FALSE;    
  106. lgfnt.lfCharSet = DEFAULT_CHARSET; 
  107. lgfnt.lfOutPrecision = OUT_DEFAULT_PRECIS;    
  108. lgfnt.lfClipPrecision = CLIP_DEFAULT_PRECIS;    
  109. lgfnt.lfQuality = DEFAULT_QUALITY; 
  110. lgfnt.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;    
  111. strcpy( lgfnt.lfFaceName, sFaceName );
  112. return SetTextFont( lgfnt );
  113. }
  114. /********************************************************************
  115. created: 2001/10/25
  116. in: lgFont
  117. out: none
  118. return: always true
  119. purpose: set the font for the control
  120. *********************************************************************/
  121. bool CHMXListCtrl::SetTextFont( const LOGFONT& lgfnt )
  122. {
  123. m_fntText.DeleteObject();
  124. m_fntText.CreateFontIndirect( &lgfnt );
  125. SetFont( &m_fntText, TRUE );
  126. return true;
  127. }
  128. /********************************************************************
  129. created: 2001/10/25
  130. in: none
  131. out: lgFont
  132. return: always true
  133. purpose: get text font
  134. *********************************************************************/
  135. bool CHMXListCtrl::GetTextFont(LOGFONT* plgfnt)
  136. {
  137. GetFont()->GetObject( sizeof(LOGFONT), (void*)plgfnt);
  138. return true;
  139. }
  140. /********************************************************************
  141. created: 2001/10/25
  142. in: bEditing
  143. out: none
  144. return: always true
  145. purpose: enable / diable editing
  146. *********************************************************************/
  147. bool CHMXListCtrl::EnableEditing(bool bEnableEditing)
  148. {
  149. m_bEnableEditing = bEnableEditing;
  150. return true;
  151. }
  152. LRESULT CHMXListCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  153. {
  154. // TODO: Add your specialized code here and/or call the base class
  155. if( !m_bEnableEditing )
  156. if( message == WM_LBUTTONDOWN || message == WM_LBUTTONDBLCLK || 
  157. message == WM_RBUTTONDOWN || message == WM_RBUTTONDBLCLK || 
  158. message == WM_KEYDOWN )
  159. return FALSE;
  160. return CListCtrl::WindowProc(message, wParam, lParam);
  161. }
  162. /********************************************************************
  163. created: 2001/10/25
  164. in: bBold
  165. out: none
  166. return: always true
  167. purpose: set font bold
  168. *********************************************************************/
  169. bool CHMXListCtrl::SetFontBold( bool bBold )
  170. {
  171. LOGFONT lgfnt;
  172. GetTextFont( &lgfnt );
  173. lgfnt.lfWeight = bBold?FW_BOLD:FW_DONTCARE; 
  174. SetTextFont( lgfnt );
  175. return true;
  176. }
  177. /********************************************************************
  178. created: 2001/10/25
  179. in: bItalic
  180. out: none
  181. return: always true
  182. purpose: set the font italic
  183. *********************************************************************/
  184. bool CHMXListCtrl::SetFontItalic( bool bItalic )
  185. {
  186. LOGFONT lgfnt;
  187. GetTextFont( &lgfnt );
  188. lgfnt.lfItalic = bItalic ? TRUE : FALSE; 
  189. SetTextFont( lgfnt );
  190. return true;
  191. }
  192. /********************************************************************
  193. created: 2001/10/25
  194. in: nHeight
  195. out: none
  196. return: always true
  197. purpose: set the font height
  198. *********************************************************************/
  199. bool CHMXListCtrl::SetFontHeight( int nHeight )
  200. {
  201. LOGFONT lgfnt;
  202. GetTextFont( &lgfnt );
  203. lgfnt.lfHeight = -MulDiv(nHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72);    
  204. lgfnt.lfWidth = 0; 
  205. SetTextFont( lgfnt );
  206. return true;
  207. }
  208. /********************************************************************
  209. created: 2001/10/25
  210. in: sFaceName
  211. out: none
  212. return: always true
  213. purpose: set the font face name
  214. *********************************************************************/
  215. bool CHMXListCtrl::SetFontFaceName( const CString& sFaceName )
  216. {
  217. LOGFONT lgfnt;
  218. GetTextFont( &lgfnt );
  219. strcpy( lgfnt.lfFaceName, sFaceName );
  220. SetTextFont( lgfnt );
  221. return true;
  222. }
  223. /********************************************************************
  224. created: 2001/10/25
  225. in: none
  226. out: none
  227. return: always true
  228. purpose: init tooltip
  229. *********************************************************************/
  230. bool CHMXListCtrl::InitToolTip()
  231. {
  232. if (m_tt.m_hWnd == NULL) {
  233. m_tt.Create(this);
  234. m_tt.Activate(true);
  235. m_tt.SendMessage(TTM_SETMAXTIPWIDTH, 0, 400);
  236. }
  237. return true;
  238. }
  239. /********************************************************************
  240. created: 2001/10/25
  241. in: sText, bActivate
  242. out: none
  243. return: always true
  244. purpose: set tooltip text
  245. *********************************************************************/
  246. bool CHMXListCtrl::SetToolTipText(const CString& sText, bool bActivate)
  247. {
  248. InitToolTip(); 
  249. // If there is no tooltip defined then add it
  250. if (m_tt.GetToolCount() == 0)
  251. {
  252. CRect rect; 
  253. GetClientRect(rect);
  254. m_tt.AddTool(this, sText, rect, 1);
  255. }
  256. m_tt.UpdateTipText(sText, this, 1);
  257. m_tt.Activate(bActivate);
  258. return true;
  259. }
  260. /********************************************************************
  261. created: 2001/10/25
  262. in: bActivate
  263. out: none
  264. return: always true
  265. purpose: activate/deactivate tooltip
  266. *********************************************************************/
  267. bool CHMXListCtrl::ActivateToolTip(bool bActivate)
  268. {
  269. if (m_tt.GetToolCount() == 0)
  270. return false;
  271. // Activate tooltip
  272. m_tt.Activate(bActivate);
  273. return true;
  274. }
  275. /********************************************************************
  276. created: 2001/10/25
  277. in: see CWnd::PretanslateMessage
  278. out: see CWnd::PretanslateMessage
  279. return: see CWnd::PretanslateMessage
  280. purpose: let tooltip works
  281. *********************************************************************/
  282. BOOL CHMXListCtrl::PreTranslateMessage(MSG* pMsg) 
  283. {
  284. InitToolTip();
  285. m_tt.RelayEvent(pMsg);
  286. return CListCtrl::PreTranslateMessage(pMsg);