| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | // 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_
 |