home *** CD-ROM | disk | FTP | other *** search
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
-
- #ifdef AFXCTL_CORE2_SEG
- #pragma code_seg(AFXCTL_CORE2_SEG)
- #endif
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- #define new DEBUG_NEW
-
- CPictureHolder::CPictureHolder() :
- m_pPict(NULL)
- {
- }
-
- CPictureHolder::~CPictureHolder()
- {
- RELEASE(m_pPict);
- }
-
- BOOL CPictureHolder::CreateEmpty()
- {
- RELEASE(m_pPict);
- PICTDESC pdesc;
- pdesc.cbSizeofstruct = sizeof(pdesc);
- pdesc.picType = PICTYPE_NONE;
- return SUCCEEDED(::OleCreatePictureIndirect(&pdesc, IID_IPicture, FALSE,
- (LPVOID*)&m_pPict));
- }
-
- BOOL CPictureHolder::CreateFromBitmap(UINT idResource)
- {
- CBitmap bmp;
- bmp.LoadBitmap(idResource);
- return CreateFromBitmap((HBITMAP)bmp.Detach(), NULL, TRUE);
- }
-
- BOOL CPictureHolder::CreateFromBitmap(CBitmap* pBitmap, CPalette* pPal,
- BOOL bTransferOwnership)
- {
- HBITMAP hbm = (HBITMAP)(pBitmap->GetSafeHandle());
- HPALETTE hpal = (HPALETTE)(pPal->GetSafeHandle());
-
- if (bTransferOwnership)
- {
- if (pBitmap != NULL)
- pBitmap->Detach();
-
- if (pPal != NULL)
- pPal->Detach();
- }
-
- return CreateFromBitmap(hbm, hpal, bTransferOwnership);
- }
-
- BOOL CPictureHolder::CreateFromBitmap(HBITMAP hbm, HPALETTE hpal,
- BOOL bTransferOwnership)
- {
- RELEASE(m_pPict);
- PICTDESC pdesc;
- pdesc.cbSizeofstruct = sizeof(pdesc);
- pdesc.picType = PICTYPE_BITMAP;
- pdesc.bmp.hbitmap = hbm;
- pdesc.bmp.hpal = hpal;
- return SUCCEEDED(::OleCreatePictureIndirect(&pdesc, IID_IPicture,
- bTransferOwnership, (LPVOID*)&m_pPict));
- }
-
- BOOL CPictureHolder::CreateFromMetafile(HMETAFILE hmf, int xExt,
- int yExt, BOOL bTransferOwnership)
- {
- RELEASE(m_pPict);
- PICTDESC pdesc;
- pdesc.cbSizeofstruct = sizeof(pdesc);
- pdesc.picType = PICTYPE_METAFILE;
- pdesc.wmf.hmeta = hmf;
- pdesc.wmf.xExt = xExt;
- pdesc.wmf.yExt = yExt;
- return SUCCEEDED(::OleCreatePictureIndirect(&pdesc, IID_IPicture,
- bTransferOwnership, (LPVOID*)&m_pPict));
- }
-
- BOOL CPictureHolder::CreateFromIcon(UINT idResource)
- {
- HICON hIcon = AfxGetApp()->LoadIcon(idResource);
- return CreateFromIcon(hIcon, TRUE);
- }
-
- BOOL CPictureHolder::CreateFromIcon(HICON hicon, BOOL bTransferOwnership)
- {
- RELEASE(m_pPict);
- PICTDESC pdesc;
- pdesc.cbSizeofstruct = sizeof(pdesc);
- pdesc.picType = PICTYPE_ICON;
- pdesc.icon.hicon = hicon;
- return SUCCEEDED(::OleCreatePictureIndirect(&pdesc, IID_IPicture,
- bTransferOwnership, (LPVOID*)&m_pPict));
- }
-
- LPPICTUREDISP CPictureHolder::GetPictureDispatch()
- {
- LPPICTUREDISP pPictDisp = NULL;
-
- if ((m_pPict != NULL) &&
- SUCCEEDED(m_pPict->QueryInterface(IID_IPictureDisp, (LPVOID*)&pPictDisp)))
- {
- ASSERT(pPictDisp != NULL);
- }
-
- return pPictDisp;
- }
-
- void CPictureHolder::SetPictureDispatch(LPPICTUREDISP pDisp)
- {
- LPPICTURE pPict = NULL;
-
- if (m_pPict != NULL)
- m_pPict->Release();
-
- if ((pDisp != NULL) &&
- SUCCEEDED(pDisp->QueryInterface(IID_IPicture, (LPVOID*)&pPict)))
- {
- ASSERT(pPict != NULL);
-
- m_pPict = pPict;
- }
- else
- {
- m_pPict = NULL;
- }
- }
-
- void CPictureHolder::Render(CDC* pDC, const CRect& rcRender,
- const CRect& rcWBounds)
- {
- if (m_pPict != NULL)
- {
- long hmWidth;
- long hmHeight;
-
- m_pPict->get_Width(&hmWidth);
- m_pPict->get_Height(&hmHeight);
-
- m_pPict->Render(pDC->m_hDC, rcRender.left, rcRender.top,
- rcRender.Width(), rcRender.Height(), 0, hmHeight-1,
- hmWidth, -hmHeight, (LPCRECT)rcWBounds);
- }
- }
-
- short CPictureHolder::GetType()
- {
- short sPicType = (short)PICTYPE_UNINITIALIZED;
-
- if (m_pPict != NULL)
- {
- m_pPict->get_Type(&sPicType);
- }
-
- return sPicType;
- }
-
- BOOL CPictureHolder::GetDisplayString(CString& strValue)
- {
- short sPicType = GetType();
-
- UINT idsType = AFX_IDS_PICTYPE_UNKNOWN;
-
- if ((sPicType >= PICTYPE_NONE) && (sPicType <= PICTYPE_ICON))
- idsType = AFX_IDS_PICTYPE_NONE + sPicType;
-
- CString strType;
- CString strFormat;
- strType.LoadString(idsType);
- strFormat.LoadString(AFX_IDS_DISPLAYSTRING_PICTURE);
-
- TCHAR szValue[_MAX_PATH];
- wsprintf(szValue, (LPCTSTR)strFormat, (LPCTSTR)strType);
-
- strValue = szValue;
- return TRUE;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // Force any extra compiler-generated code into AFX_INIT_SEG
-
- #ifdef AFX_INIT_SEG
- #pragma code_seg(AFX_INIT_SEG)
- #endif
-