// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_WIN_SCOPED_GDI_OBJECT_H_ #define BASE_WIN_SCOPED_GDI_OBJECT_H_ #include <windows.h> #include "base/scoped_generic.h" namespace base { namespace win { namespace internal { template <class T> struct ScopedGDIObjectTraits { static T InvalidValue() { return nullptr; } static void Free(T object) { DeleteObject(object); } }; // An explicit specialization for HICON because we have to call DestroyIcon() // instead of DeleteObject() for HICON. template <> void inline ScopedGDIObjectTraits<HICON>::Free(HICON icon) { DestroyIcon(icon); } } // namespace internal // Like ScopedHandle but for GDI objects. template <class T> using ScopedGDIObject = ScopedGeneric<T, internal::ScopedGDIObjectTraits<T>>; // Typedefs for some common use cases. typedef ScopedGDIObject<HBITMAP> ScopedBitmap; typedef ScopedGDIObject<HRGN> ScopedRegion; typedef ScopedGDIObject<HFONT> ScopedHFONT; typedef ScopedGDIObject<HICON> ScopedHICON; } // namespace win } // namespace base #endif // BASE_WIN_SCOPED_GDI_OBJECT_H_