As I noted above, Windows uses the device context to store ”attributes“ that govern how the GDI functions operate on the display. For instance, when you display some text using the TextOut function, you don't have to specify the color of the text or the font. Windows uses the device context to obtain this information.
When a program obtains a handle to a device context, Windows creates a device context with default values for all the attributes. The device context attributes are shown in the following table. A program can change or obtain any of the attributes.
| Device Context Attribute | Default | Function(s) to Change | Function(s) to Get | 
| Mapping mode | MM_TEXT | SetMapMode | GetMapMode | 
| Window origin | (0, 0) | SetWindowOrg | GetWindowOrg OffsetWindowOrg | 
| Viewport origin | (0, 0) | SetViewportOrg | GetViewportOrg OffsetViewportOrg | 
| Window extents | (1, 1) | SetWindowExt | GetWindowExt SetMapMode | 
| Viewport extents | (1, 1) | SetViewportExt | GetViewportExt SetMapMode | 
| Pen | BLACK_PE | SelectObject | SelectObject | 
| Brush | WHITE_BRUSH | SelectObject | SelectObject | 
| Font | SYSTEM_FONT | SelectObject | SelectObject | 
| Bitmap | None | SelectObject | SelectObject | 
| Current pen position | (0, 0) | MoveTo LineTo | GetCurrentPosition | 
| Background mode | OPAQUE | SetBkMode | GetBkMode | 
| Background color | White | SetBkColor | GetBkColor | 
| Text color | Black | SetTextColor | GetTextColor | 
| Drawing mode | R2_COPYPEN | SetROP2 | GetROP2 | 
| Stretching mode | BLACKONWHITE | SetPolyFillMode | GetPolyFillMode | 
| Polygon filling mode | ALTERNATE | SetPolyFillMode | GetPolyFillMode | 
| Intercharacter spacing | 0 | SetTextCharacterExtra | GetTextCharacterExtra | 
| Brush origin | (0, 0) in screen coordinates | SetBrushOrg | GetBrushOrg | 
| Clipping region | None | SelectObject | SelectObject | 
| SelectClipRgn IntersectClipRect OffsetClipRgn ExcludeClipRect | GetClipBox |