scoped_select_object.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef BASE_WIN_SCOPED_SELECT_OBJECT_H_
  5. #define BASE_WIN_SCOPED_SELECT_OBJECT_H_
  6. #include <windows.h>
  7. #include "base/check.h"
  8. namespace base {
  9. namespace win {
  10. // Helper class for deselecting object from DC.
  11. class ScopedSelectObject {
  12. public:
  13. ScopedSelectObject(HDC hdc, HGDIOBJ object)
  14. : hdc_(hdc), oldobj_(SelectObject(hdc, object)) {
  15. DCHECK(hdc_);
  16. DCHECK(object);
  17. DCHECK(oldobj_);
  18. DCHECK(oldobj_ != HGDI_ERROR);
  19. }
  20. ScopedSelectObject(const ScopedSelectObject&) = delete;
  21. ScopedSelectObject& operator=(const ScopedSelectObject&) = delete;
  22. ~ScopedSelectObject() {
  23. HGDIOBJ object = SelectObject(hdc_, oldobj_);
  24. DCHECK((GetObjectType(oldobj_) != OBJ_REGION && object) ||
  25. (GetObjectType(oldobj_) == OBJ_REGION && object != HGDI_ERROR));
  26. }
  27. private:
  28. const HDC hdc_;
  29. const HGDIOBJ oldobj_;
  30. };
  31. } // namespace win
  32. } // namespace base
  33. #endif // BASE_WIN_SCOPED_SELECT_OBJECT_H_