DeviceContext

The DeviceContext structure contains functions and structures to create and operate on device contexts.

structure DeviceContext:
  sig
    type BITMAP and HDC and HGDIOBJ and HWND and HRGN
    type LOGBRUSH = Brush.LOGBRUSH
    type LOGFONT = Font.LOGFONT
    type LOGPEN = Pen.LOGPEN
    type POINT = {x: int, y: int}

    type StockObjectType
    val ANSI_FIXED_FONT : StockObjectType
    val ANSI_VAR_FONT : StockObjectType
    val BLACK_BRUSH : StockObjectType
    val BLACK_PEN : StockObjectType
    val CLR_INVALID : StockObjectType
    val DEFAULT_PALETTE : StockObjectType
    val DEVICE_DEFAULT_FONT : StockObjectType
    val DKGRAY_BRUSH : StockObjectType
    val GRAY_BRUSH : StockObjectType
    val HOLLOW_BRUSH : StockObjectType
    val LTGRAY_BRUSH : StockObjectType
    val NULL_BRUSH : StockObjectType
    val NULL_PEN : StockObjectType
    val OEM_FIXED_FONT : StockObjectType
    val SYSTEM_FIXED_FONT : StockObjectType
    val SYSTEM_FONT : StockObjectType
    val WHITE_BRUSH : StockObjectType
    val WHITE_PEN : StockObjectType

    val GetStockObject : StockObjectType -> HGDIOBJ

    eqtype DeviceItem
    val ASPECTX : DeviceItem
    val ASPECTXY : DeviceItem
    val ASPECTY : DeviceItem
    val BITSPIXEL : DeviceItem
    val CLIPCAPS : DeviceItem
    val COLORRES : DeviceItem
    val CURVECAPS : DeviceItem
    val DRIVERVERSION : DeviceItem
    val HORZRES : DeviceItem
    val HORZSIZE : DeviceItem
    val LINECAPS : DeviceItem
    val LOGPIXELSX : DeviceItem
    val LOGPIXELSY : DeviceItem
    val NUMBRUSHES : DeviceItem
    val NUMCOLORS : DeviceItem
    val NUMFONTS : DeviceItem
    val NUMMARKERS : DeviceItem
    val NUMPENS : DeviceItem
    val NUMRESERVED : DeviceItem
    val PDEVICESIZE : DeviceItem
    val PHYSICALHEIGHT : DeviceItem
    val PHYSICALOFFSETX : DeviceItem
    val PHYSICALOFFSETY : DeviceItem
    val PHYSICALWIDTH : DeviceItem
    val PLANES : DeviceItem
    val POLYGONALCAPS : DeviceItem
    val RASTERCAPS : DeviceItem
    val SCALINGFACTORX : DeviceItem
    val SCALINGFACTORY : DeviceItem
    val SIZEPALETTE : DeviceItem
    val TECHNOLOGY : DeviceItem
    val TEXTCAPS : DeviceItem
    val VERTRES : DeviceItem
    val VERTSIZE : DeviceItem

    val GetDeviceCaps : HDC * DeviceItem -> int

   (* Results of various calls to GetDeviceCaps. *)
    val CC_CHORD : int
    val CC_CIRCLES : int
    val CC_ELLIPSES : int
    val CC_INTERIORS : int
    val CC_NONE : int
    val CC_PIE : int
    val CC_ROUNDRECT : int
    val CC_STYLED : int
    val CC_WIDE : int
    val CC_WIDESTYLED : int

    val CP_NONE : int
    val CP_RECTANGLE : int
    val CP_REGION : int

    val DT_CHARSTREAM : int
    val DT_DISPFILE : int
    val DT_METAFILE : int
    val DT_PLOTTER : int
    val DT_RASCAMERA : int
    val DT_RASDISPLAY : int
    val DT_RASPRINTER : int

    val LC_INTERIORS : int
    val LC_MARKER : int
    val LC_NONE : int
    val LC_POLYLINE : int
    val LC_POLYMARKER : int
    val LC_STYLED : int
    val LC_WIDE : int
    val LC_WIDESTYLED : int

    val PC_INTERIORS : int
    val PC_NONE : int
    val PC_PATHS : int
    val PC_POLYGON : int
    val PC_POLYPOLYGON : int
    val PC_RECTANGLE : int
    val PC_SCANLINE : int
    val PC_STYLED : int
    val PC_TRAPEZOID : int
    val PC_WIDE : int
    val PC_WIDESTYLED : int
    val PC_WINDPOLYGON : int

    val RC_BANDING : int
    val RC_BIGFONT : int
    val RC_BITBLT : int
    val RC_BITMAP64 : int
    val RC_DEVBITS : int
    val RC_DIBTODEV : int
    val RC_DI_BITMAP : int
    val RC_FLOODFILL : int
    val RC_GDI20_OUTPUT : int
    val RC_GDI20_STATE : int
    val RC_OP_DX_OUTPUT : int
    val RC_PALETTE : int
    val RC_SAVEBITMAP : int
    val RC_SCALING : int
    val RC_STRETCHBLT : int
    val RC_STRETCHDIB : int

    val TC_CP_STROKE : int
    val TC_CR_90 : int
    val TC_CR_ANY : int
    val TC_EA_DOUBLE : int
    val TC_IA_ABLE : int
    val TC_OP_CHARACTER : int
    val TC_OP_STROKE : int
    val TC_RA_ABLE : int
    val TC_RESERVED : int
    val TC_SA_CONTIN : int
    val TC_SA_DOUBLE : int
    val TC_SA_INTEGER : int
    val TC_SCROLLBLT : int
    val TC_SF_X_YINDEP : int
    val TC_SO_ABLE : int
    val TC_UA_ABLE : int
    val TC_VA_ABLE : int

    datatype DMColor = DMCOLOR_COLOR | DMCOLOR_MONOCHROME
    and DMDither =
          DMDITHER_COARSE
        | DMDITHER_FINE
        | DMDITHER_GRAYSCALE
        | DMDITHER_LINEART
        | DMDITHER_NONE
        | DMDITHER_OTHER of int
    and DMDuplex = DMDUP_HORIZONTAL | DMDUP_SIMPLEX | DMDUP_VERTICAL
    and DMICMIntent =
          DMICMINTENT_OTHER of int
        | DMICM_COLORMETRIC
        | DMICM_CONTRAST
        | DMICM_SATURATE
    and DMICMMethod =
          DMICMMETHOD_DEVICE
        | DMICMMETHOD_DRIVER
        | DMICMMETHOD_NONE
        | DMICMMETHOD_OTHER of int
        | DMICMMETHOD_SYSTEM
    and DMMedia =
          DMICMMEDIA_OTHER of int
        | DMMEDIA_GLOSSY
        | DMMEDIA_STANDARD
        | DMMEDIA_TRANSPARENCY
    and DMOrientation = DMORIENT_LANDSCAPE | DMORIENT_PORTRAIT
    and DMPaperSize =
          DMPAPER_10X11
        | DMPAPER_10X14
        | DMPAPER_11X17
        | DMPAPER_15X11
        | DMPAPER_9X11
        | DMPAPER_A2
        | DMPAPER_A3
        | DMPAPER_A3_EXTRA
        | DMPAPER_A3_EXTRA_TRANSVERSE
        | DMPAPER_A3_TRANSVERSE
        | DMPAPER_A4
        | DMPAPER_A4SMALL
        | DMPAPER_A4_EXTRA
        | DMPAPER_A4_PLUS
        | DMPAPER_A4_TRANSVERSE
        | DMPAPER_A5
        | DMPAPER_A5_EXTRA
        | DMPAPER_A5_TRANSVERSE
        | DMPAPER_A_PLUS
        | DMPAPER_B4
        | DMPAPER_B5
        | DMPAPER_B5_EXTRA
        | DMPAPER_B5_TRANSVERSE
        | DMPAPER_B_PLUS
        | DMPAPER_CSHEET
        | DMPAPER_DSHEET
        | DMPAPER_ENV_10
        | DMPAPER_ENV_11
        | DMPAPER_ENV_12
        | DMPAPER_ENV_14
        | DMPAPER_ENV_9
        | DMPAPER_ENV_B4
        | DMPAPER_ENV_B5
        | DMPAPER_ENV_B6
        | DMPAPER_ENV_C3
        | DMPAPER_ENV_C4
        | DMPAPER_ENV_C5
        | DMPAPER_ENV_C6
        | DMPAPER_ENV_C65
        | DMPAPER_ENV_DL
        | DMPAPER_ENV_INVITE
        | DMPAPER_ENV_ITALY
        | DMPAPER_ENV_MONARCH
        | DMPAPER_ENV_PERSONAL
        | DMPAPER_ESHEET
        | DMPAPER_EXECUTIVE
        | DMPAPER_FANFOLD_LGL_GERMAN
        | DMPAPER_FANFOLD_STD_GERMAN
        | DMPAPER_FANFOLD_US
        | DMPAPER_FOLIO
        | DMPAPER_ISO_B4
        | DMPAPER_JAPANESE_POSTCARD
        | DMPAPER_LEDGER
        | DMPAPER_LEGAL
        | DMPAPER_LEGAL_EXTRA
        | DMPAPER_LETTER
        | DMPAPER_LETTERSMALL
        | DMPAPER_LETTER_EXTRA
        | DMPAPER_LETTER_EXTRA_TRANSVERSE
        | DMPAPER_LETTER_PLUS
        | DMPAPER_LETTER_TRANSVERSE
        | DMPAPER_NOTE
        | DMPAPER_OTHER of int
        | DMPAPER_QUARTO
        | DMPAPER_RESERVED_48
        | DMPAPER_RESERVED_49
        | DMPAPER_STATEMENT
        | DMPAPER_TABLOID
        | DMPAPER_TABLOID_EXTRA
    and DMResolution =
          DMRES_DPI of int
        | DMRES_DRAFT
        | DMRES_HIGH
        | DMRES_LOW
        | DMRES_MEDIUM
    and DMSource =
          DMBIN_AUTO
        | DMBIN_CASSETTE
        | DMBIN_ENVELOPE
        | DMBIN_ENVMANUAL
        | DMBIN_FORMSOURCE
        | DMBIN_LARGECAPACITY
        | DMBIN_LARGEFMT
        | DMBIN_LOWER
        | DMBIN_MANUAL
        | DMBIN_MIDDLE
        | DMBIN_ONLYONE
        | DMBIN_SMALLFMT
        | DMBIN_TRACTOR
        | DMBIN_UPPER
        | DMSOURCE_OTHER of int
    and DMTrueType =
          DMTT_BITMAP
        | DMTT_DOWNLOAD
        | DMTT_DOWNLOAD_OUTLINE
        | DMTT_SUBDEV

    type DEVMODE = {
        deviceName: string,
        driverVersion: int,
        orientation: DMOrientation option,
        paperSize: DMPaperSize option,
        paperLength: int option,
        paperWidth: int option,
        scale: int option,
        copies: int option,
        defaultSource: DMSource option,
        printQuality: DMResolution option,
        color: DMColor option,
        duplex: DMDuplex option,
        yResolution: int option,
        ttOption: DMTrueType option,
        collate: bool option,
        formName: string option,
        logPixels: int option,
        bitsPerPixel: int option,
        pelsWidth: int option,
        pelsHeight: int option,
        displayFlags: int option, (* Apparently no longer used. *)
        displayFrequency: int option,
        icmMethod: DMICMMethod option,
        icmIntent: DMICMIntent option,
        mediaType: DMMedia option,
        ditherType: DMDither option,
        iccManufacturer: int option,
        iccModel: int option,
        panningWidth: int option,
        panningHeight: int option,
        driverPrivate: Word8Vector.vector
        }

    val CancelDC : HDC -> unit
    val CreateCompatibleDC : HDC -> HDC
    val CreateDC : string option * string option * string option * DEVMODE option -> HDC

    val DeleteDC : HDC -> unit
    val DeleteObject : HGDIOBJ -> unit

    datatype
      EnumObject =
          OBJ_BITMAP
        | OBJ_BRUSH
        | OBJ_DC
        | OBJ_ENHMETADC
        | OBJ_ENHMETAFILE
        | OBJ_EXTPEN
        | OBJ_FONT
        | OBJ_MEMDC
        | OBJ_METADC
        | OBJ_METAFILE
        | OBJ_PAL
        | OBJ_PEN
        | OBJ_REGION
    val GetCurrentObject : HDC * EnumObject -> HGDIOBJ
    val GetDC : HWND -> HDC

    datatype
      DeviceContextFlag =
          DCX_CACHE
        | DCX_CLIPCHILDREN
        | DCX_CLIPSIBLINGS
        | DCX_EXCLUDERGN
        | DCX_EXCLUDEUPDATE
        | DCX_INTERSECTRGN
        | DCX_INTERSECTUPDATE
        | DCX_LOCKWINDOWUPDATE
        | DCX_NORECOMPUTE
        | DCX_NORESETATTRS
        | DCX_PARENTCLIP
        | DCX_VALIDATE
        | DCX_WINDOW

    val GetDCEx : HWND * HRGN * DeviceContextFlag list -> HDC
    val GetDCOrgEx : HDC -> POINT

    datatype
      GetObject =
          GO_Bitmap of BITMAP
        | GO_Brush of LOGBRUSH
        | GO_Font of LOGFONT
        | GO_Palette of int
        | GO_Pen of LOGPEN

    val GetObject : HGDIOBJ -> GetObject
    val GetObjectType : HGDIOBJ -> EnumObject
    val ReleaseDC : HWND * HDC -> bool
    val ResetDC : HDC * DEVMODE -> HDC
    val RestoreDC : HDC * int -> unit
    val SaveDC : HDC -> int
    val SelectObject : HDC * HGDIOBJ -> HGDIOBJ

    type DEVNAMES = {driver: string, device: string, output: string, default: bool}

  end