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

ListView/ListBox

开发平台:

Visual C++

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