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