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
5#ifndef BASE_WIN_SCOPED_SELECT_OBJECT_H_
6#define BASE_WIN_SCOPED_SELECT_OBJECT_H_
7
8#include <windows.h>
9
10#include "base/basictypes.h"
11#include "base/logging.h"
12
13namespace base {
14namespace win {
15
16// Helper class for deselecting object from DC.
17class ScopedSelectObject {
18 public:
19  ScopedSelectObject(HDC hdc, HGDIOBJ object)
20      : hdc_(hdc),
21        oldobj_(SelectObject(hdc, object)) {
22    DCHECK(hdc_);
23    DCHECK(object);
24    DCHECK(oldobj_ != NULL && oldobj_ != HGDI_ERROR);
25  }
26
27  ~ScopedSelectObject() {
28    HGDIOBJ object = SelectObject(hdc_, oldobj_);
29    DCHECK((GetObjectType(oldobj_) != OBJ_REGION && object != NULL) ||
30           (GetObjectType(oldobj_) == OBJ_REGION && object != HGDI_ERROR));
31  }
32
33 private:
34  HDC hdc_;
35  HGDIOBJ oldobj_;
36
37  DISALLOW_COPY_AND_ASSIGN(ScopedSelectObject);
38};
39
40}  // namespace win
41}  // namespace base
42
43#endif  // BASE_WIN_SCOPED_SELECT_OBJECT_H_
44