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.