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

ListView/ListBox

开发平台:

Visual C++

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