158 lines
3.5 KiB
C++
158 lines
3.5 KiB
C++
|
// BmpStatic.cpp : implementation file
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "musicplayer.h"
|
|||
|
#include "BmpStatic.h"
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
#define new DEBUG_NEW
|
|||
|
#undef THIS_FILE
|
|||
|
static char THIS_FILE[] = __FILE__;
|
|||
|
#endif
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// CBmpStatic
|
|||
|
|
|||
|
CBmpStatic::CBmpStatic()
|
|||
|
{
|
|||
|
m_InitDC = FALSE;
|
|||
|
m_ImageID = IDB_MUSIC_WND;
|
|||
|
m_TxtFormat = DT_CENTER|DT_VCENTER;
|
|||
|
}
|
|||
|
|
|||
|
CBmpStatic::~CBmpStatic()
|
|||
|
{
|
|||
|
m_BackgroundDC.DeleteDC();
|
|||
|
m_txtFont.DeleteObject();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BEGIN_MESSAGE_MAP(CBmpStatic, CStatic)
|
|||
|
//{{AFX_MSG_MAP(CBmpStatic)
|
|||
|
ON_WM_ERASEBKGND()
|
|||
|
ON_WM_PAINT()
|
|||
|
//}}AFX_MSG_MAP
|
|||
|
END_MESSAGE_MAP()
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// CBmpStatic message handlers
|
|||
|
|
|||
|
BOOL CBmpStatic::OnEraseBkgnd(CDC* pDC)
|
|||
|
{
|
|||
|
// TODO: Add your message handler code here and/or call default
|
|||
|
if (!m_InitDC && m_ImageID)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>м<EFBFBD><D0BC><EFBFBD>ͼƬ
|
|||
|
CDC tmpDC;
|
|||
|
tmpDC.CreateCompatibleDC(NULL);
|
|||
|
|
|||
|
CBitmap tmpBmp;
|
|||
|
tmpBmp.LoadBitmap(m_ImageID);
|
|||
|
tmpDC.SelectObject(&tmpBmp);
|
|||
|
|
|||
|
tmpBmp.DeleteObject();
|
|||
|
|
|||
|
// <20><><EFBFBD>㰴ť<E3B0B4>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
CRect rect;
|
|||
|
GetClientRect(&rect);
|
|||
|
|
|||
|
// <20><>ȡ<EFBFBD><C8A1>ť<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
|||
|
int cx = rect.Width();
|
|||
|
int cy = rect.Height();
|
|||
|
|
|||
|
// <20><>/<2F>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
CRect mainWnd;
|
|||
|
CRect subWnd;
|
|||
|
|
|||
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
CWnd *pWnd = GetParent();
|
|||
|
pWnd->GetWindowRect(&mainWnd);
|
|||
|
|
|||
|
// <20><>ȡ<EFBFBD><C8A1>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|||
|
GetWindowRect(&subWnd);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
CPoint tpLeft;
|
|||
|
tpLeft.x = subWnd.TopLeft().x - mainWnd.TopLeft().x;
|
|||
|
tpLeft.y = subWnd.TopLeft().y - mainWnd.TopLeft().y;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|||
|
tmpBmp.CreateCompatibleBitmap(&tmpDC,cx,cy);
|
|||
|
|
|||
|
m_BackgroundDC.CreateCompatibleDC(NULL);
|
|||
|
m_BackgroundDC.SelectObject(&tmpBmp);
|
|||
|
|
|||
|
m_BackgroundDC.BitBlt(0,0,cx,cy,&tmpDC,tpLeft.x,tpLeft.y,SRCCOPY);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|||
|
tmpBmp.DeleteObject();
|
|||
|
tmpDC.DeleteDC();
|
|||
|
|
|||
|
m_InitDC = true;
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
//return CStatic::OnEraseBkgnd(pDC);
|
|||
|
}
|
|||
|
|
|||
|
void CBmpStatic::OnPaint()
|
|||
|
{
|
|||
|
CPaintDC dc(this); // device context for painting
|
|||
|
|
|||
|
// TODO: Add your message handler code here
|
|||
|
CRect rc;
|
|||
|
GetClientRect(&rc);
|
|||
|
|
|||
|
CDC tmpDC;
|
|||
|
CBitmap tmpBmp;
|
|||
|
|
|||
|
tmpBmp.CreateCompatibleBitmap(&dc,320,240);
|
|||
|
tmpDC.CreateCompatibleDC(&dc);
|
|||
|
tmpDC.SelectObject(&tmpBmp);
|
|||
|
tmpDC.SelectObject(&m_txtFont);
|
|||
|
tmpDC.SetBkMode(TRANSPARENT);
|
|||
|
|
|||
|
tmpDC.BitBlt(0,0,rc.Width(),rc.Height(),&m_BackgroundDC,0,0,SRCCOPY);
|
|||
|
|
|||
|
CString str;
|
|||
|
GetWindowText(str);
|
|||
|
|
|||
|
tmpDC.DrawText(str,&rc,m_TxtFormat);
|
|||
|
|
|||
|
dc.BitBlt(0,0,rc.Width(),rc.Height(),&tmpDC,0,0,SRCCOPY);
|
|||
|
|
|||
|
tmpDC.DeleteDC();
|
|||
|
tmpBmp.DeleteObject();
|
|||
|
// Do not call CStatic::OnPaint() for painting messages
|
|||
|
}
|
|||
|
|
|||
|
void CBmpStatic::LoadBgBmp(int nBmpID)
|
|||
|
{
|
|||
|
m_ImageID = nBmpID;
|
|||
|
}
|
|||
|
|
|||
|
void CBmpStatic::SetTxtFont(int nFont)
|
|||
|
{
|
|||
|
m_txtFont.DeleteObject();
|
|||
|
|
|||
|
switch(nFont)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
m_txtFont.CreateFont(14,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|||
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
m_txtFont.CreateFont(32,0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|||
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|||
|
m_TxtFormat = DT_RIGHT|DT_BOTTOM;
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
m_txtFont.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|||
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|||
|
m_TxtFormat = DT_LEFT|DT_BOTTOM;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|