// -------------------------------------------------------------------------- // Module Name: ThemeSection.cpp // // Copyright (c) 2000, Microsoft Corporation // // Class that wraps CUxThemeFile. CUxThemeFile automatically closes the section // member variable handle. This makes usage of the class difficult because // it doesn't duplicate the handle but it takes ownership. It does declare // the handle as a PUBLIC member variable so we capitalize on this poor // design. This class wraps CUxThemeFile to make the life of users of this // class easier by not having them worry about closing the handles or not. // When you use this class the handle is NOT closed. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- #include "stdafx.h" #include "ThemeSection.h" #define goto !!DO NOT USE GOTO!! - DO NOT REMOVE THIS ON PAIN OF DEATH // -------------------------------------------------------------------------- // CThemeSection::CThemeSection // // Arguments: // // Returns: // // Purpose: Constructor for CThemeSection. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- CThemeSection::CThemeSection (void) { } // -------------------------------------------------------------------------- // CThemeSection::~CThemeSection // // Arguments: // // Returns: // // Purpose: Destructor for CThemeSection. This is TOTALLY BOGUS having to // set an internal member variable contents to NULL to prevent // it from releasing resources but the rest of the code relies // on the auto-release behavior without duplication of the // handle. This is done to protect this class from that hassle. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- CThemeSection::~CThemeSection (void) { _themeFile._hMemoryMap = NULL; } // -------------------------------------------------------------------------- // CThemeSection::operator CUxThemeFile* // // Arguments: // // Returns: CUxThemeFile* // // Purpose: Automagic operator to convert from CThemeSection to // CUxThemeFile* which keeps current usage transparent. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- CThemeSection::operator CUxThemeFile* (void) { return(&_themeFile); } // -------------------------------------------------------------------------- // CThemeSection::Open // // Arguments: hSection = Section to use. // dwViewAccess = desired access for mapped view. // // Returns: HRESULT // // Purpose: Pass thru to CUxThemeFile::OpenFile. // // History: 2000-11-22 vtan created // 2002-03-24 scotthan add dwViewAccess arg. // -------------------------------------------------------------------------- HRESULT CThemeSection::Open (HANDLE hSection, DWORD dwViewAccess /* FILE_MAP_READ*/) { return(_themeFile.OpenFromHandle(hSection, dwViewAccess)); } // -------------------------------------------------------------------------- // CThemeSection::ValidateData // // Arguments: fFullCheck = Perform a full check? // // Returns: HRESULT // // Purpose: Pass thru to CUxThemeFile::ValidateThemeData. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- HRESULT CThemeSection::ValidateData (bool fFullCheck) { return(_themeFile.ValidateThemeData(fFullCheck)); } // -------------------------------------------------------------------------- // CThemeSection::CreateFromSection // // Arguments: hSection = Section to duplicate. // // Returns: HRESULT // // Purpose: Pass thru to CUxThemeFile::CreateFromSection. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- HRESULT CThemeSection::CreateFromSection (HANDLE hSection) { return(_themeFile.CreateFromSection(hSection)); } // -------------------------------------------------------------------------- // CThemeSection::Get // // Arguments: // // Returns: HANDLE // // Purpose: Returns the handle of the CUxThemeFile object. Because this // class always NULLs out the handle it will get leaked. Once // this handle is returned the caller owns the handle. // // History: 2000-11-22 vtan created // -------------------------------------------------------------------------- HANDLE CThemeSection::Get (void) const { return(_themeFile._hMemoryMap); } // -------------------------------------------------------------------------- // CThemeSection::GetData // // Arguments: // // Returns: PVOID // // Purpose: Returns a pointer to the theme data. // // History: 2002-03-24 scotthan created // -------------------------------------------------------------------------- PVOID CThemeSection::GetData(void) { return _themeFile._pbThemeData; }