ColorStaticST.cpp
上传用户:fxzxgm
上传日期:2007-01-02
资源大小:99k
文件大小:7k
源码类别:

Static控件

开发平台:

Visual C++

  1. // ColorStaticST.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ColorStaticST.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CColorStaticST
  12. CColorStaticST::CColorStaticST()
  13. {
  14. // Set default parent window and notification message
  15. m_pParent = NULL;
  16. m_nMsg = WM_USER;
  17. // By default the control is not blinking
  18. m_bTextBlink = FALSE;
  19. m_nTextBlinkStep = 0;
  20. m_bBkBlink = FALSE;
  21. m_nBkBlinkStep = 0;
  22. m_nTimerId = 0;
  23. // Set default foreground text
  24. m_crTextColor = ::GetSysColor(COLOR_BTNTEXT);
  25. // Set default foreground text (when blinking)
  26. m_crBlinkTextColors[0] = m_crTextColor;
  27. m_crBlinkTextColors[1] = m_crTextColor;
  28. // Set default background text
  29. m_crBkColor = ::GetSysColor(COLOR_BTNFACE);
  30. // Set default background text (when blinking)
  31. m_crBlinkBkColors[0] = m_crBkColor;
  32. m_crBlinkBkColors[1] = m_crBkColor;
  33. // Set default background brush
  34. m_brBkgnd.CreateSolidBrush(m_crBkColor);
  35. // Set default background brush (when blinking)
  36. m_brBlinkBkgnd[0].CreateSolidBrush(m_crBkColor);
  37. m_brBlinkBkgnd[1].CreateSolidBrush(m_crBkColor);
  38. } // End of CColorStaticST
  39. CColorStaticST::~CColorStaticST()
  40. {
  41. } // End of ~CColorStaticST
  42. BEGIN_MESSAGE_MAP(CColorStaticST, CStatic)
  43. //{{AFX_MSG_MAP(CColorStaticST)
  44. ON_WM_CTLCOLOR_REFLECT()
  45. ON_WM_TIMER()
  46. ON_WM_DESTROY()
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CColorStaticST message handlers
  51. HBRUSH CColorStaticST::CtlColor(CDC* pDC, UINT nCtlColor) 
  52. {
  53. // Set foreground color
  54. // If control is blinking (text)
  55. if (m_bTextBlink == TRUE)
  56. {
  57. pDC->SetTextColor(m_crBlinkTextColors[m_nTextBlinkStep]);
  58. }
  59. else
  60. {
  61. pDC->SetTextColor(m_crTextColor);
  62. }
  63. // Set background color & brush
  64. // If control is blinking (background)
  65. if (m_bBkBlink == TRUE)
  66. {
  67. pDC->SetBkColor(m_crBlinkBkColors[m_nBkBlinkStep]);
  68. return (HBRUSH)m_brBlinkBkgnd[m_nBkBlinkStep];
  69. }
  70. // If control is not blinking (background)
  71. pDC->SetBkColor(m_crBkColor);
  72. // Return a non-NULL brush if the parent's handler should not be called
  73.     return (HBRUSH)m_brBkgnd;
  74. } // End of CtlColor
  75. void CColorStaticST::OnDestroy() 
  76. {
  77. CStatic::OnDestroy();
  78. // Destroy timer (if any)
  79. if (m_nTimerId > 0) KillTimer(m_nTimerId);
  80. // Destroy resources
  81.     m_brBkgnd.DeleteObject();
  82.     m_brBlinkBkgnd[0].DeleteObject();
  83.     m_brBlinkBkgnd[1].DeleteObject();
  84. } // End of OnDestroy
  85. void CColorStaticST::SetTextColor(COLORREF crTextColor)
  86. {
  87. // Set new foreground color
  88. if (crTextColor != 0xffffffff)
  89. {
  90. m_crTextColor = crTextColor;
  91. }
  92. else // Set default foreground color
  93. {
  94. m_crTextColor = ::GetSysColor(COLOR_BTNTEXT);
  95. }
  96. // Repaint control
  97. Invalidate();
  98. } // End of SetTextColor
  99. COLORREF CColorStaticST::GetTextColor()
  100. {
  101. return m_crTextColor;
  102. } // End of GetTextColor
  103. void CColorStaticST::SetBkColor(COLORREF crBkColor)
  104. {
  105. // Set new background color
  106. if (crBkColor != 0xffffffff)
  107. {
  108. m_crBkColor = crBkColor;
  109. }
  110. else // Set default background color
  111. {
  112. m_crBkColor = ::GetSysColor(COLOR_BTNFACE);
  113. }
  114.     m_brBkgnd.DeleteObject();
  115.     m_brBkgnd.CreateSolidBrush(m_crBkColor);
  116. // Repaint control
  117. Invalidate();
  118. } // End of SetBkColor
  119. COLORREF CColorStaticST::GetBkColor()
  120. {
  121. return m_crBkColor;
  122. } // End of GetBkColor
  123. void CColorStaticST::SetBlinkTextColors(COLORREF crBlinkTextColor1, COLORREF crBlinkTextColor2)
  124. {
  125. // Set new blink text colors
  126. m_crBlinkTextColors[0] = crBlinkTextColor1;
  127. m_crBlinkTextColors[1] = crBlinkTextColor2;
  128. } // End of SetBlinkTextColors
  129. void CColorStaticST::StartTextBlink(BOOL bStart, UINT nElapse)
  130. {
  131. UINT nCount;
  132. // Destroy any previous timer
  133. if (m_nTimerId > 0)
  134. {
  135. KillTimer(m_nTimerId);
  136. m_nTimerId = 0;
  137. }
  138. m_bTextBlink = bStart;
  139. m_nTextBlinkStep = 0;
  140. // Start timer
  141. if (m_bTextBlink == TRUE) 
  142. {
  143. switch (nElapse)
  144. {
  145. case ST_FLS_SLOW:
  146. nCount = 2000;
  147. break;
  148. case ST_FLS_NORMAL:
  149. nCount = 1000;
  150. break;
  151. case ST_FLS_FAST:
  152. nCount = 500;
  153. break;
  154. default:
  155. nCount = nElapse;
  156. break;
  157. }
  158. m_nTimerId = SetTimer(1, nCount, NULL); 
  159. }
  160. } // End of StartTextBlink
  161. void CColorStaticST::SetBlinkBkColors(COLORREF crBlinkBkColor1, COLORREF crBlinkBkColor2)
  162. {
  163. // Set new blink background colors
  164. m_crBlinkBkColors[0] = crBlinkBkColor1;
  165. m_crBlinkBkColors[1] = crBlinkBkColor2;
  166.     m_brBlinkBkgnd[0].DeleteObject();
  167.     m_brBlinkBkgnd[0].CreateSolidBrush(m_crBlinkBkColors[0]);
  168.     m_brBlinkBkgnd[1].DeleteObject();
  169.     m_brBlinkBkgnd[1].CreateSolidBrush(m_crBlinkBkColors[1]);
  170. // Repaint control
  171. Invalidate();
  172. } // End of SetBlinkBkColor
  173. void CColorStaticST::StartBkBlink(BOOL bStart, UINT nElapse)
  174. {
  175. UINT nCount;
  176. // Destroy any previous timer
  177. if (m_nTimerId > 0)
  178. {
  179. KillTimer(m_nTimerId);
  180. m_nTimerId = 0;
  181. }
  182. m_bBkBlink = bStart;
  183. m_nBkBlinkStep = 0;
  184. // Start timer
  185. if (m_bBkBlink == TRUE) 
  186. {
  187. switch (nElapse)
  188. {
  189. case ST_FLS_SLOW:
  190. nCount = 2000;
  191. break;
  192. case ST_FLS_NORMAL:
  193. nCount = 1000;
  194. break;
  195. case ST_FLS_FAST:
  196. nCount = 500;
  197. break;
  198. default:
  199. nCount = nElapse;
  200. break;
  201. }
  202. m_nTimerId = SetTimer(1, nCount, NULL);
  203. }
  204. } // End of StartBkBlink
  205. void CColorStaticST::EnableNotify(CWnd* pParent, UINT nMsg)
  206. {
  207. m_pParent = pParent;
  208. m_nMsg = nMsg;
  209. } // End of EnableNotify
  210. const short CColorStaticST::GetVersionI()
  211. {
  212. return 10; // Divide by 10 to get actual version
  213. } // End of GetVersionI
  214. const char* CColorStaticST::GetVersionC()
  215. {
  216. return "1.0";
  217. } // End of GetVersionC
  218. void CColorStaticST::OnTimer(UINT nIDEvent) 
  219. {
  220. if (nIDEvent == m_nTimerId)
  221. {
  222. // If control is blinking (text) switch its color
  223. if (m_bTextBlink == TRUE) m_nTextBlinkStep = !m_nTextBlinkStep;
  224. // If control is blinking (background) switch its color
  225. if (m_bBkBlink == TRUE) m_nBkBlinkStep = !m_nBkBlinkStep;
  226. // If there is any blinking in action then repaint the control
  227. // and send the notification message (if any)
  228. if (m_bBkBlink == TRUE || m_bTextBlink == TRUE) 
  229. {
  230. Invalidate();
  231. // Send notification message only on rising blink
  232. if (m_pParent != NULL && (m_nBkBlinkStep == 1 || m_nTextBlinkStep == 1)) 
  233. m_pParent->PostMessage(m_nMsg, GetDlgCtrlID(), 0);
  234. }
  235. }
  236. else
  237. CStatic::OnTimer(nIDEvent);
  238. } // End of OnTimer