OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_SCOPED_HANDLE_WIN_H_ | 5 #ifndef BASE_SCOPED_HANDLE_WIN_H_ |
6 #define BASE_SCOPED_HANDLE_WIN_H_ | 6 #define BASE_SCOPED_HANDLE_WIN_H_ |
7 | 7 |
8 #include <windows.h> | 8 #include <windows.h> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 private: | 179 private: |
180 void Close() { | 180 void Close() { |
181 if (object_) | 181 if (object_) |
182 DeleteObject(object_); | 182 DeleteObject(object_); |
183 } | 183 } |
184 | 184 |
185 T object_; | 185 T object_; |
186 DISALLOW_COPY_AND_ASSIGN(ScopedGDIObject); | 186 DISALLOW_COPY_AND_ASSIGN(ScopedGDIObject); |
187 }; | 187 }; |
188 | 188 |
| 189 // An explicit specialization for HICON because we have to call DestroyIcon() |
| 190 // instead of DeleteObject() for HICON. |
| 191 template<> |
| 192 void ScopedGDIObject<HICON>::Close() { |
| 193 if (object_) |
| 194 DestroyIcon(object_); |
| 195 } |
| 196 |
189 // Typedefs for some common use cases. | 197 // Typedefs for some common use cases. |
190 typedef ScopedGDIObject<HBITMAP> ScopedBitmap; | 198 typedef ScopedGDIObject<HBITMAP> ScopedBitmap; |
191 typedef ScopedGDIObject<HRGN> ScopedRegion; | 199 typedef ScopedGDIObject<HRGN> ScopedRegion; |
192 typedef ScopedGDIObject<HFONT> ScopedHFONT; | 200 typedef ScopedGDIObject<HFONT> ScopedHFONT; |
193 | 201 typedef ScopedGDIObject<HICON> ScopedHICON; |
194 | 202 |
195 // Like ScopedHandle except for HGLOBAL. | 203 // Like ScopedHandle except for HGLOBAL. |
196 template<class T> | 204 template<class T> |
197 class ScopedHGlobal { | 205 class ScopedHGlobal { |
198 public: | 206 public: |
199 explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) { | 207 explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) { |
200 data_ = static_cast<T*>(GlobalLock(glob_)); | 208 data_ = static_cast<T*>(GlobalLock(glob_)); |
201 } | 209 } |
202 ~ScopedHGlobal() { | 210 ~ScopedHGlobal() { |
203 GlobalUnlock(glob_); | 211 GlobalUnlock(glob_); |
(...skipping 10 matching lines...) Expand all Loading... |
214 | 222 |
215 private: | 223 private: |
216 HGLOBAL glob_; | 224 HGLOBAL glob_; |
217 | 225 |
218 T* data_; | 226 T* data_; |
219 | 227 |
220 DISALLOW_EVIL_CONSTRUCTORS(ScopedHGlobal); | 228 DISALLOW_EVIL_CONSTRUCTORS(ScopedHGlobal); |
221 }; | 229 }; |
222 | 230 |
223 #endif // BASE_SCOPED_HANDLE_WIN_H_ | 231 #endif // BASE_SCOPED_HANDLE_WIN_H_ |
OLD | NEW |