Home | History | Annotate | Download | only in win
      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/logging.h"
     11 #include "base/macros.h"
     12 
     13 namespace base {
     14 namespace win {
     15 
     16 // Helper class for deselecting object from DC.
     17 class 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