//==============================================================; // // This source code is only intended as a supplement to existing Microsoft documentation. // // // // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (C) 1999 Microsoft Corporation. All Rights Reserved. // // // //==============================================================; #include "About.h" #include "resource.h" #include "globals.h" #include CSnapinAbout::CSnapinAbout() : m_cref(0) { OBJECT_CREATED m_hSmallImage = (HBITMAP)LoadImage(g_hinst, MAKEINTRESOURCE(IDB_SMBMP), IMAGE_BITMAP, 16, 16, LR_LOADTRANSPARENT); m_hLargeImage = (HBITMAP)LoadImage(g_hinst, MAKEINTRESOURCE(IDB_LGBMP), IMAGE_BITMAP, 32, 32, LR_LOADTRANSPARENT); m_hSmallImageOpen = (HBITMAP)LoadImage(g_hinst, MAKEINTRESOURCE(IDB_SMOPEN), IMAGE_BITMAP, 16, 16, LR_LOADTRANSPARENT); m_hAppIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_ICON1)); } CSnapinAbout::~CSnapinAbout() { if (m_hSmallImage != NULL) FreeResource(m_hSmallImage); if (m_hLargeImage != NULL) FreeResource(m_hLargeImage); if (m_hSmallImageOpen != NULL) FreeResource(m_hSmallImageOpen); if (m_hAppIcon != NULL) FreeResource(m_hAppIcon); m_hSmallImage = NULL; m_hLargeImage = NULL; m_hSmallImageOpen = NULL; m_hAppIcon = NULL; OBJECT_DESTROYED } /////////////////////// // IUnknown implementation /////////////////////// STDMETHODIMP CSnapinAbout::QueryInterface(REFIID riid, LPVOID *ppv) { if (!ppv) return E_FAIL; *ppv = NULL; if (IsEqualIID(riid, IID_IUnknown)) *ppv = static_cast(this); else if (IsEqualIID(riid, IID_ISnapinAbout)) *ppv = static_cast(this); if (*ppv) { reinterpret_cast(*ppv)->AddRef(); return S_OK; } return E_NOINTERFACE; } STDMETHODIMP_(ULONG) CSnapinAbout::AddRef() { return InterlockedIncrement((LONG *)&m_cref); } STDMETHODIMP_(ULONG) CSnapinAbout::Release() { if (InterlockedDecrement((LONG *)&m_cref) == 0) { // we need to decrement our object count in the DLL delete this; return 0; } return m_cref; } /////////////////////////////// // Interface ISnapinAbout /////////////////////////////// STDMETHODIMP CSnapinAbout::GetSnapinDescription( /* [out] */ LPOLESTR *lpDescription) { _TCHAR szDesc[MAX_PATH]; LoadString(g_hinst, IDS_SNAPINDESC, szDesc, sizeof(szDesc)); return AllocOleStr(lpDescription, szDesc); } STDMETHODIMP CSnapinAbout::GetProvider( /* [out] */ LPOLESTR *lpName) { return AllocOleStr(lpName, _T("Copyright © 1998 Microsoft Corporation"));; } STDMETHODIMP CSnapinAbout::GetSnapinVersion( /* [out] */ LPOLESTR *lpVersion) { return AllocOleStr(lpVersion, _T("1.0")); } STDMETHODIMP CSnapinAbout::GetSnapinImage( /* [out] */ HICON *hAppIcon) { *hAppIcon = m_hAppIcon; if (*hAppIcon == NULL) return E_FAIL; else return S_OK; } STDMETHODIMP CSnapinAbout::GetStaticFolderImage( /* [out] */ HBITMAP *hSmallImage, /* [out] */ HBITMAP *hSmallImageOpen, /* [out] */ HBITMAP *hLargeImage, /* [out] */ COLORREF *cMask) { *hSmallImage = m_hSmallImage; *hLargeImage = m_hLargeImage; *hSmallImageOpen = m_hSmallImageOpen; *cMask = RGB(0, 128, 128); if (*hSmallImage == NULL || *hLargeImage == NULL || *hSmallImageOpen == NULL) return E_FAIL; else return S_OK; } // this allocates a chunk of memory using CoTaskMemAlloc and copies our chars into it HRESULT CSnapinAbout::AllocOleStr(LPOLESTR *lpDest, _TCHAR *szBuffer) { MAKE_WIDEPTR_FROMTSTR_ALLOC(wszStr, szBuffer); *lpDest = wszStr; return S_OK; }