www.gusucode.com > 可用于报警信息的VC文本闪烁高亮静态类-源码程序 > 可用于报警信息的VC文本闪烁高亮静态类-源码程序\code\StaticRectangle.cpp
//Download by http://www.NewXing.com // StaticRectangle.cpp : implementation file // #include "stdafx.h" #include "StaticRectangle.h" #include "MemDC.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CStaticRectangle CStaticRectangle::CStaticRectangle() { m_BkColor = COLOR_RED; m_TextColor = RGB(255,128,64); nMillSec = 10; bGleam = FALSE; m_pFnt = new CAutoFont("隶书"); m_pFnt->SetHeight(28); m_pFnt->SetWidth(12); m_pFnt->SetBold(TRUE); } CStaticRectangle::~CStaticRectangle() { if(m_pFnt) delete m_pFnt; } BEGIN_MESSAGE_MAP(CStaticRectangle, CStatic) //{{AFX_MSG_MAP(CStaticRectangle) ON_WM_PAINT() ON_WM_TIMER() ON_WM_ERASEBKGND() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStaticRectangle message handlers void CStaticRectangle::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // 获得控件区域 GetClientRect (&m_rectCtrl); CMemDC memDC(&dc, &m_rectCtrl); if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL)) { m_dcBackground.CreateCompatibleDC(&dc); m_bitmapBackground.CreateCompatibleBitmap(&dc, m_rectCtrl.Width(), m_rectCtrl.Height()) ; m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground) ; } DrawRectangleBackground(&m_dcBackground, m_rectCtrl); memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(), &m_dcBackground, 0, 0, SRCCOPY) ; // Do not call CStatic::OnPaint() for painting messages } void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &rect) { CBrush brushFill, *pBrushOld; int nXSize,nYSize; CSize szText; CFont *fOldFont; nXSize = rect.Width(); nYSize = rect.Height(); brushFill.DeleteObject(); brushFill.CreateSolidBrush(m_BkColor); pBrushOld = pDC->SelectObject(&brushFill); pDC->Rectangle(rect); pDC->SetBkColor(m_BkColor); pDC->SetTextColor(m_TextColor); fOldFont = (CFont *)pDC->SelectObject(m_pFnt); szText = pDC->GetTextExtent(strText); nXSize = (nXSize - szText.cx)/2; nYSize = (nYSize - szText.cy)/2; pDC->TextOut(nXSize,nYSize,strText); pDC->SelectObject(pBrushOld); pDC->SelectObject(&fOldFont); brushFill.DeleteObject(); } void CStaticRectangle::SetRectangleText(CString strVal) { this->strText = strVal; } void CStaticRectangle::SetBackColor(UINT nStyle)//设置背景颜色 { this->m_BkColor = nStyle; } void CStaticRectangle::SetBkGleam(BOOL bShow) { if(this->bGleam) { if(!bShow) KillTimer(nMillSec); } else { if(bShow) SetTimer(nMillSec,750,NULL); } this->bGleam = bShow; } void CStaticRectangle::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(this->m_BkColor == COLOR_RED) this->m_BkColor = COLOR_GREEN; else this->m_BkColor = COLOR_RED; Invalidate(); CStatic::OnTimer(nIDEvent); } BOOL CStaticRectangle::OnEraseBkgnd(CDC* pDC) { return TRUE; }