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

ListView/ListBox

开发平台:

Visual C++

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