www.pudn.com > VX.rar > AviToolbar.cpp
// AviToolbar.cpp : implementation file
//
#include "stdafx.h"
#include "DTASvm.h"
#include "AviToolbar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAviToolbar
CAviToolbar::CAviToolbar()
{
m_clrHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);//RGB(222,230,255);
m_clrNormal = RGB(212,208,200);//::GetSysColor(COLOR_BTNFACE);
m_clrShadow = ::GetSysColor(COLOR_MENUTEXT);//RGB(64,0,128);//
m_bBackgroundImage=TRUE;
m_bmpName="";
}
CAviToolbar::~CAviToolbar()
{
}
BEGIN_MESSAGE_MAP(CAviToolbar, CToolBar)
//{{AFX_MSG_MAP(CAviToolbar)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_NCPAINT()
ON_COMMAND(IDM_SETSKIN, OnSetskin)
ON_WM_SYSCOLORCHANGE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAviToolbar message handlers
int CAviToolbar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CToolBar::OnCreate(lpCreateStruct) == -1)
return -1;
//创建AVI并自动播放
avi.Create(ACS_AUTOPLAY |WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),this,ID_MYAVI);
avi.Open(IDR_AVI1); //打开AVI
avi.Play(0,-1,-1); //从第一帧开始循环播放
return 0;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 重置工具栏大小 移动视频位置,使之紧靠工具栏右侧.
void CAviToolbar::OnSize(UINT nType, int cx, int cy)
{
CToolBar::OnSize(nType, cx, cy);
//SetHeight(22); //设置工具栏高度
CRect toolbarclient;
GetClientRect(&toolbarclient); //得到工具栏坐标
toolbarclient.left = toolbarclient.right-44;
//toolbarclient.OffsetRect(1,0); //调整矩形位置
avi.MoveWindow(toolbarclient.left,10,toolbarclient.right,32); //移动AVI
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 重画工具栏
void CAviToolbar::OnNcPaint()
{
CControlBar::EraseNonClient();
CWindowDC dc(this);
CRect pRect;
CRect pOver;
GetClientRect( &pRect );
pOver = pRect;
pOver.right = pOver.left + 3;
pOver.OffsetRect(2,0);
CBrush brFill(m_clrNormal);
dc.FillRect(pOver,&brFill);
InvalidateRect( &pRect, TRUE );
DrawGripper(dc);
// Do not call CToolBar::OnNcPaint() for painting messages
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 给工具栏添加工具栏把手
void CAviToolbar::DrawGripper(CDC & dc) const
{
CRect rcGripper;
GetWindowRect(rcGripper);
ScreenToClient(rcGripper);
rcGripper.OffsetRect(-rcGripper.left, -rcGripper.top);
// Gripper at left
rcGripper.DeflateRect(3, 3);
//rcGripper.left -= 0;
rcGripper.top += 1;
rcGripper.right = rcGripper.left;
rcGripper.bottom -= 44;
for(int i=1;i<=23;i++)
{
dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow );
rcGripper.OffsetRect(3, 0);
dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
rcGripper.OffsetRect(-3, 2);
}
}
void CAviToolbar::SetTooltext()
{
//+++++++++++++++++++++++++++设置工具栏文字++++++++++++++++++++++++++++++++++++++++++
for(int i = 0; i < CToolBar::GetCount(); i++)
{
UINT id = CToolBar::GetItemID(i);
CString s;
if(!s.LoadString(id)) continue;
int j = s.Find(_T('\n'));
if(j < 0) continue;
s = s.Right(s.GetLength() - j - 1);
CToolBar::SetButtonText(i,s);
//CJToolBar::SetButtonDropDown(IDR_POPUP);
}
// Adjust sizes to include text
CRect rect;
CToolBar::GetItemRect(0,&rect);
CToolBar::SetSizes(rect.Size(),CSize(32,31));
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
BOOL CAviToolbar::LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal )
{
CFile file;
if( !file.Open( sBMPFile, CFile::modeRead) )
return FALSE;
BITMAPFILEHEADER bmfHeader;
// Read file header
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
return FALSE;
// File type should be 'BM'
if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B'))
return FALSE;
// Get length of the remainder of the file and allocate memory
DWORD nPackedDIBLen = file.GetLength() - sizeof(BITMAPFILEHEADER);
HGLOBAL hDIB = ::GlobalAlloc(GMEM_FIXED, nPackedDIBLen);
if (hDIB == 0)
return FALSE;
// Read the remainder of the bitmap file.
if (file.ReadHuge((LPSTR)hDIB, nPackedDIBLen) != nPackedDIBLen )
{
::GlobalFree(hDIB);
return FALSE;
}
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
// If bmiHeader.biClrUsed is zero we have to infer the number
// of colors from the number of bits used to specify it.
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed :
1 << bmiHeader.biBitCount;
LPVOID lpDIBBits;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
// Create the logical palette
if( pPal != NULL )
{
// Create the palette
if( nColors <= 256 )
{
UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
pLP->palVersion = 0x300;
pLP->palNumEntries = nColors;
for( int i=0; i < nColors; i++)
{
pLP->palPalEntry[i].peRed = bmInfo.bmiColors[i].rgbRed;
pLP->palPalEntry[i].peGreen = bmInfo.bmiColors[i].rgbGreen;
pLP->palPalEntry[i].peBlue = bmInfo.bmiColors[i].rgbBlue;
pLP->palPalEntry[i].peFlags = 0;
}
pPal->CreatePalette( pLP );
delete[] pLP;
}
}
CClientDC dc(NULL);
CPalette* pOldPalette = NULL;
if( pPal )
{
pOldPalette = dc.SelectPalette( pPal, FALSE );
dc.RealizePalette();
}
HBITMAP hBmp = CreateDIBitmap( dc.m_hDC, // handle to device context
&bmiHeader, // pointer to bitmap size and format data
CBM_INIT, // initialization flag
lpDIBBits, // pointer to initialization data
&bmInfo, // pointer to bitmap color-format data
DIB_RGB_COLORS); // color-data usage
bitmap.Detach();
bitmap.Attach( hBmp );
if( pOldPalette )
dc.SelectPalette( pOldPalette, FALSE );
::GlobalFree(hDIB);
return TRUE;
}
void CAviToolbar::SetBackImage ()
{
CReBarCtrl& rc = m_wndReBar.GetReBarCtrl ();
for (UINT i = 0; i < rc.GetBandCount(); i++)
{
REBARBANDINFO info;
memset (&info, 0, sizeof (REBARBANDINFO));
info.cbSize = sizeof (info);
info.fMask = RBBIM_BACKGROUND;
info.hbmBack = m_bBackgroundImage ? (HBITMAP)m_bmpBack : NULL;
rc.SetBandInfo (i, &info);
CRect rectBand;
rc.GetRect (i, rectBand);
rc.InvalidateRect (rectBand);
rc.UpdateWindow ();
info.fMask = RBBIM_CHILD;
rc.GetBandInfo (i, &info);
if (info.hwndChild != NULL)
{
::InvalidateRect (info.hwndChild, NULL, TRUE);
::UpdateWindow (info.hwndChild);
}
}
}
void CAviToolbar::LoadBackImage ()
{
if(m_bmpName.GetLength()>0)
LoadBMPImage(m_bmpName,m_bmpBack,NULL);
else
LoadBMPImage("res\\back.bmp",m_bmpBack,NULL);
}
void CAviToolbar::OnSetskin()
{
// TODO: Add your command handler code here
}
void CAviToolbar::OnSysColorChange()
{
CToolBar::OnSysColorChange();
LoadBackImage ();
SetBackImage ();
}