| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- // 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
|