| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // TransparentStatic2.cpp : implementation file
- //
- #include "stdafx.h"
- #include "TransparentStatic.h"
- // CTransparentStatic
- IMPLEMENT_DYNAMIC(CTransparentStatic, CStatic)
- CTransparentStatic::CTransparentStatic()
- {
- }
- CTransparentStatic::~CTransparentStatic()
- {
- }
- BEGIN_MESSAGE_MAP(CTransparentStatic, CStatic)
- ON_MESSAGE(WM_SETTEXT,OnSetText)
- ON_WM_CTLCOLOR_REFLECT()
- ON_WM_ERASEBKGND()
- END_MESSAGE_MAP()
- // CTransparentStatic message handlers
- LRESULT CTransparentStatic::OnSetText(WPARAM wParam,LPARAM lParam)
- {
- LRESULT Result = Default();
- Invalidate();
- UpdateWindow();
- return Result;
- }
- HBRUSH CTransparentStatic::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
- {
- pDC->SetTextColor(m_crText);
- pDC->SelectObject(&m_font);
- pDC->SetBkMode(TRANSPARENT);
- return (HBRUSH)GetStockObject(NULL_BRUSH);
- }
- BOOL CTransparentStatic::OnEraseBkgnd(CDC* pDC)
- {
- if (m_Bmp.GetSafeHandle() == NULL)
- {
- CRect Rect;
- GetWindowRect(&Rect);
- CWnd *pParent = GetParent();
- ASSERT(pParent);
- pParent->ScreenToClient(&Rect); //convert our corrdinates to our parents
-
- //copy what's on the parents at this point
- CDC *pDC = pParent->GetDC();
- CDC MemDC;
- MemDC.CreateCompatibleDC(pDC);
- m_Bmp.CreateCompatibleBitmap(pDC,Rect.Width(),Rect.Height());
- CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp);
- MemDC.SetTextColor(m_crText);
- MemDC.SelectObject(&m_font);
- MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),pDC,Rect.left,Rect.top,SRCCOPY);
- MemDC.SelectObject(pOldBmp);
- pParent->ReleaseDC(pDC);
- }
- else //copy what we copied off the parent the first time back onto the parent
- {
- CRect Rect;
- GetClientRect(Rect);
- CDC MemDC;
- MemDC.CreateCompatibleDC(pDC);
- CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp);
- MemDC.SetTextColor(m_crText);
- MemDC.SelectObject(&m_font);
- pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);
- MemDC.SelectObject(pOldBmp);
- }
- return TRUE;
- }
- /*************************************************************
- *add at : 2014-08-11 by唐太闲
- *describe: 设置CStatic的文本
- *************************************************************/
- CTransparentStatic& CTransparentStatic::SetText(const CString& strText)
- {
- if(IsWindow(this->GetSafeHwnd()))
- {
- SetWindowText(strText);
- }
- return *this;
- }
- /*************************************************************
- *add at : 2014-08-11 by唐太闲
- *describe: 设置字体和大小CreatePointFont的第一个参数要求很大,
- 乘了个7,7是随便定的
- *************************************************************/
- CTransparentStatic& CTransparentStatic::SetMyFont(int nSize,const CString& strFont)
- {
- /*VERIFY(m_font.CreateFont(nSize,//tc:这个数字是字体大小
- 0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
- CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,strFont));
- SetFont(&m_font);*/
- m_font.CreatePointFont(nSize*7,strFont);
- Update(); //tc:设置完成后需要立即刷新
- return *this;
- }
- /*************************************************************
- *add at : 2014-08-11 by唐太闲
- *describe: 设置文本颜色,m_crText在函数CtlColor中会用来进行设置
- *************************************************************/
- CTransparentStatic& CTransparentStatic::SetTextColor(COLORREF crText)
- {
- m_crText = crText;
- Update();//tc:设置完成后需要立即刷新
- return *this;
- }
- /*************************************************************
- *add at : 2014-08-11 by唐太闲
- *describe: 通过父窗口强制刷新区域
- *************************************************************/
- void CTransparentStatic::Update()
- {
- CRect (rc);
- GetWindowRect(rc);
- RedrawWindow();
- GetParent()->ScreenToClient(rc);
- GetParent()->InvalidateRect(rc,TRUE);
- GetParent()->UpdateWindow();
- }
|