CommonDialog

The CommonDialog structure contains functions and structures to create common forms of dialogue boxes.

structure CommonDialog :

  sig

    type HWND and HDC and COLORREF = Color.COLORREF and HINSTANCE

    type POINT = { x: int, y: int }

    type RECT =  { left: int, top: int, right: int, bottom: int }



     (* Error codes *)

    datatype CDERR =

             DIALOGFAILURE

        |    GENERALCODES

        |    STRUCTSIZE

        |    INITIALIZATION

        |    NOTEMPLATE

        |    NOHINSTANCE

        |    LOADSTRFAILURE

        |    FINDRESFAILURE

        |    LOADRESFAILURE

        |    LOCKRESFAILURE

        |    MEMALLOCFAILURE

        |    MEMLOCKFAILURE

        |    NOHOOK

        |    REGISTERMSGFAIL



        |    PRINTERCODES

        |    SETUPFAILURE

        |    PARSEFAILURE

        |    RETDEFFAILURE

        |    LOADDRVFAILURE

        |    GETDEVMODEFAIL

        |    INITFAILURE

        |    NODEVICES

        |    NODEFAULTPRN

        |    DNDMMISMATCH

        |    CREATEICFAILURE

        |    PRINTERNOTFOUND

        |    DEFAULTDIFFERENT



        |    CHOOSEFONTCODES

        |    NOFONTS

        |    MAXLESSTHANMIN



        |    FILENAMECODES

        |    SUBCLASSFAILURE

        |    INVALIDFILENAME

        |    BUFFERTOOSMALL



        |    FINDREPLACECODES

        |    BUFFERLENGTHZERO



        |    CHOOSECOLORCODES



    val CommDlgExtendedError : unit -> CDERR



    (* ChooseColor *)



    structure ChooseColorFlags :

      sig

        include BIT_FLAGS

        val CC_ANYCOLOR : flags

        val CC_FULLOPEN : flags

        val CC_PREVENTFULLOPEN : flags

        val CC_RGBINIT : flags

        val CC_SHOWHELP : flags

        val CC_SOLIDCOLOR : flags

      end



    type CHOOSECOLOR =

    {

        owner: HWND option,

        result: COLORREF,

        customColors: COLORREF list,

        flags: ChooseColorFlags.flags

    }



    val ChooseColor : CHOOSECOLOR -> CHOOSECOLOR option





    (* ChooseFont *)



    structure ChooseFontFlags :

      sig

        include BIT_FLAGS

        val CF_ANSIONLY : flags

        val CF_APPLY : flags

        val CF_BOTH : flags

        val CF_EFFECTS : flags

        val CF_FIXEDPITCHONLY : flags

        val CF_FORCEFONTEXIST : flags

        val CF_NOFACESEL : flags

        val CF_NOOEMFONTS : flags

        val CF_NOSCRIPTSEL : flags

        val CF_NOSIMULATIONS : flags

        val CF_NOSIZESEL : flags

        val CF_NOSTYLESEL : flags

        val CF_NOVECTORFONTS : flags

        val CF_NOVERTFONTS : flags

        val CF_PRINTERFONTS : flags

        val CF_SCALABLEONLY : flags

        val CF_SCREENFONTS : flags

        val CF_SCRIPTSONLY : flags

        val CF_SELECTSCRIPT : flags

        val CF_SHOWHELP : flags

        val CF_TTONLY : flags

        val CF_WYSIWYG : flags

      end



    structure ChooseFontTypes :

      sig

        include BIT_FLAGS

        val BOLD_FONTTYPE : flags

        val ITALIC_FONTTYPE : flags

        val PRINTER_FONTTYPE : flags

        val REGULAR_FONTTYPE : flags

        val SCREEN_FONTTYPE : flags

        val SIMULATED_FONTTYPE : flags

      end



    type CHOOSEFONT =

    {

        owner: HWND option,

        context: HDC option,

        logFont: Font.LOGFONT option,

        pointSize: int,

        flags: ChooseFontFlags.flags,

        colors: COLORREF,

        style: string option,

        fontType: ChooseFontTypes.flags,

        size: {min: int, max: int} option

    }



    val ChooseFont : CHOOSEFONT -> CHOOSEFONT option



    (* FindText and ReplaceText *)

    structure FindReplaceFlags :

      sig

        include BIT_FLAGS

        val FR_DIALOGTERM : flags

        val FR_DOWN : flags

        val FR_FINDNEXT : flags

        val FR_HIDEMATCHCASE : flags

        val FR_HIDEUPDOWN : flags

        val FR_HIDEWHOLEWORD : flags

        val FR_MATCHCASE : flags

        val FR_NOMATCHCASE : flags

        val FR_NOUPDOWN : flags

        val FR_NOWHOLEWORD : flags

        val FR_REPLACE : flags

        val FR_REPLACEALL : flags

        val FR_SHOWHELP : flags

        val FR_WHOLEWORD : flags

      end



    datatype

      TemplateType =

          TemplateDefault

        | TemplateHandle of Dialog.DLGTEMPLATE

        | TemplateResource of HINSTANCE * Resource.RESID



    type FINDREPLACE =

    {

        owner : HWND,

        template: TemplateType,

        flags: FindReplaceFlags.flags,

        findWhat: string,

        replaceWith: string,

        bufferSize: int

    }



    val FindText : FINDREPLACE -> HWND

    val ReplaceText : FINDREPLACE -> HWND



    (* GetOpenFileName and GetSaveFileName *)



    structure OpenFileFlags :

      sig

        include BIT_FLAGS

        val OFN_ALLOWMULTISELECT : flags

        val OFN_CREATEPROMPT : flags

        val OFN_EXPLORER : flags

        val OFN_EXTENSIONDIFFERENT : flags

        val OFN_FILEMUSTEXIST : flags

        val OFN_HIDEREADONLY : flags

        val OFN_LONGNAMES : flags

        val OFN_NOCHANGEDIR : flags

        val OFN_NODEREFERENCELINKS : flags

        val OFN_NOLONGNAMES : flags

        val OFN_NONETWORKBUTTON : flags

        val OFN_NOREADONLYRETURN : flags

        val OFN_NOTESTFILECREATE : flags

        val OFN_NOVALIDATE : flags

        val OFN_OVERWRITEPROMPT : flags

        val OFN_PATHMUSTEXIST : flags

        val OFN_READONLY : flags

        val OFN_SHAREAWARE : flags

        val OFN_SHOWHELP : flags

      end



    type OPENFILENAME =

    {

        owner: HWND option,

        template: TemplateType,

        filter: (string * string) list,

        customFilter: (string * string) option,

        filterIndex: int,

        file: string,    (* Initial value of file and returned result. *)

        maxFile: int,    (* Max size of expected file name. *)

        fileTitle : string,

        initialDir: string option,

        title: string option, (* Optional title - default is Save or Open. *)

        flags: OpenFileFlags.flags,

        defExt: string option

    }



    val GetFileTitle : string -> string

    val GetOpenFileName : OPENFILENAME -> OPENFILENAME option

    val GetSaveFileName : OPENFILENAME -> OPENFILENAME option



    (* PageSetupDlg *)

    structure PageSetupFlags :

      sig

        include BIT_FLAGS

        val PSD_DEFAULTMINMARGINS : flags

        val PSD_DISABLEMARGINS : flags

        val PSD_DISABLEORIENTATION : flags

        val PSD_DISABLEPAGEPAINTING : flags

        val PSD_DISABLEPAPER : flags

        val PSD_DISABLEPRINTER : flags

        val PSD_INHUNDREDTHSOFMILLIMETERS : flags

        val PSD_INTHOUSANDTHSOFINCHES : flags

        val PSD_MARGINS : flags

        val PSD_MINMARGINS : flags

        val PSD_NONETWORKBUTTON : flags

        val PSD_NOWARNING : flags

        val PSD_RETURNDEFAULT : flags

        val PSD_SHOWHELP : flags

      end



    type PAGESETUPDLG =

    {

        owner: HWND option,

        devMode: DeviceContext.DEVMODE option,

        devNames: DeviceContext.DEVNAMES option,

        flags: PageSetupFlags.flags,

        paperSize: POINT,

        minMargin: RECT,

        margin: RECT

        (* For the moment we ignore the other options. *)

    }



    val PageSetupDlg : PAGESETUPDLG -> PAGESETUPDLG option



    (* PrintDlg *)

    structure PrintDlgFlags :

      sig

        include BIT_FLAGS

        val PD_ALLPAGES : flags

        val PD_COLLATE : flags

        val PD_DISABLEPRINTTOFILE : flags

        val PD_HIDEPRINTTOFILE : flags

        val PD_NONETWORKBUTTON : flags

        val PD_NOPAGENUMS : flags

        val PD_NOSELECTION : flags

        val PD_NOWARNING : flags

        val PD_PAGENUMS : flags

        val PD_PRINTSETUP : flags

        val PD_PRINTTOFILE : flags

        val PD_RETURNDC : flags

        val PD_RETURNDEFAULT : flags

        val PD_RETURNIC : flags

        val PD_SELECTION : flags

        val PD_SHOWHELP : flags

        val PD_USEDEVMODECOPIES : flags

        val PD_USEDEVMODECOPIESANDCOLLATE : flags

     end



    type PRINTDLG =

    {

        owner: HWND option,

        devMode: DeviceContext.DEVMODE option,

        devNames: DeviceContext.DEVNAMES option,

        context: HDC option,

        flags: PrintDlgFlags.flags,

        fromPage: int,

        toPage: int,

        minPage: int,

        maxPage: int,

        copies: int

        (* For the moment we ignore the other options. *)

    }



    val PrintDlg : PRINTDLG -> PRINTDLG option

  end

Generally these functions create modal dialogue boxes.  They take a configuration structure as an argument and return an option type.  NONE is returned if the user presses Cancel.  If the user presses OK the result is SOME with a modified structure containing the user's input. 

FindText(findReplace): HWND
ReplaceText(findReplace): HWND
These create modeless dialogues and return a handle to the window for the dialogue.   They send FINDMSGSTRING messages to the parent window to indicate various changes of state.