windows-nt/Source/XPSP1/NT/multimedia/dshow/mfvideo/msmfcnt/msmfimg.cpp
2020-09-26 16:20:57 +08:00

164 lines
5.7 KiB
C++

/*************************************************************************/
/* Copyright (C) 1999 Microsoft Corporation */
/* File: MSMFImg.cpp */
/* Description: Implementation of CMSMFImg Static Image class */
/* Author: David Janecek */
/*************************************************************************/
#include "stdafx.h"
#include "MSMFCnt.h"
#include "MSMFImg.h"
/////////////////////////////////////////////////////////////////////////////
// CMSMFImg
/*************************************************************************/
/* Function: CMSMFImg */
/*************************************************************************/
CMSMFImg::CMSMFImg(){
Init();
}/* end of function CMSMFSldr */
/*************************************************************************/
/* Function: Init */
/* Description: Initializes variable states. */
/*************************************************************************/
void CMSMFImg::Init(){
m_blitType = DISABLE;
m_clrBackColor = ::GetSysColor(COLOR_BTNFACE);
#if 0 // used for getting the windowed case working DJ
m_bWindowOnly = TRUE;
#endif
}/* end of function Init */
/*************************************************************************/
/* Function: ~CMSMFImg */
/* Description: Cleanup the stuff we allocated here rest will be done */
/* in the button destructor. */
/*************************************************************************/
CMSMFImg::~CMSMFImg(){
//Init();
ATLTRACE(TEXT("In the IMG Object destructor!\n"));
}/* end of function CMSMFSldr */
/*************************************************************************/
/* Function: OnDraw */
/* Description: Does the basic drawing */
/* First draws the background the the thumb at the specific position. */
/*************************************************************************/
HRESULT CMSMFImg::OnDraw(ATL_DRAWINFO& di){
HRESULT hr = S_OK;
BOOL bRet = TRUE;
HDC hdc = di.hdcDraw;
RECT rcClient = *(RECT*)di.prcBounds;
HPALETTE hNewPal = NULL;
if (!m_BackBitmap.IsEmpty()){
hNewPal = CBitmap::GetSuperPal();
}
else {
hNewPal = m_BackBitmap.GetPal();
}/* end of if statement */
if (::IsWindow(m_hWnd)){ //in other words not windowless
CBitmap::SelectRelizePalette(hdc, hNewPal);
}/* end of if statement */
// DRAW THE BACKGROUND
if (!m_BackBitmap.IsEmpty()){
bRet = m_BackBitmap.PaintTransparentDIB(hdc, &rcClient,
&rcClient);
}
else {
COLORREF clr;
::OleTranslateColor (m_clrBackColor, CBitmap::GetSuperPal(), &clr);
HBRUSH hbrBack = ::CreateSolidBrush(clr);
if(NULL == hbrBack){
hr = E_FAIL;
return(hr);
}/* end of if statement */
::FillRect(hdc, &rcClient, hbrBack);
::DeleteObject(hbrBack);
}/* end of if statement */
return (hr);
}/* end of function OnDraw */
/*************************************************************************/
/* Function: OnDispChange */
/* Description: Forwards this message to all the controls. */
/*************************************************************************/
LRESULT CMSMFImg::OnDispChange(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL& bHandled){
LONG lRes =0;
long cBitsPerPixel = (long) wParam;
long cxScreen = LOWORD(lParam);
long cyScreen = HIWORD(lParam);
m_BackBitmap.OnDispChange(cBitsPerPixel, cxScreen, cyScreen);
return(lRes);
}/* end of function OnDispChange */
/*************************************************************************/
/* Function: PutImage */
/* Description: Sets the image of the background. */
/*************************************************************************/
HRESULT CMSMFImg::PutImage(BSTR strFilename){
HRESULT hr = S_OK;
m_bstrBackFilename = strFilename;
bool fGrayOut = false;
hr = m_BackBitmap.PutImage(strFilename, m_hRes, FALSE, m_blitType,
MAINTAIN_ASPECT_RATIO);
if(FAILED(hr)){
return(hr);
}/* end of if statement */
InvalidateRgn(); // our helper function
return(hr);
}/* end of function PutImage */
/*************************************************************************/
/* Function: get_Image */
/*************************************************************************/
STDMETHODIMP CMSMFImg::get_Image(BSTR *pstrFilename){
*pstrFilename = m_bstrBackFilename.Copy();
return S_OK;
}/* end of function get_Image */
/*************************************************************************/
/* Function: put_Image */
/*************************************************************************/
STDMETHODIMP CMSMFImg::put_Image(BSTR strFilename){
return (PutImage(strFilename));
}/* end of function put_BackStatic */
/*************************************************************************/
/* End of file: MSMFImg.cpp */
/*************************************************************************/