User Tools

Site Tools


Setting the position of the File Open dialogue

by Richard Russell, February 2016

The File Open (and File Save) dialogues open, by default, at a position on the screen determined by Windows. Whilst this will almost always be satisfactory, there may very occasionally be a requirement to position the dialogue box at specific coordinates. This may be achieved using the code below:

        INSTALL @lib$+"CALLBACK" : REM Must be version 2.0 or later
        SWP_NOSIZE = &1
        SWP_NOZORDER = &4
        WM_INITDIALOG = &110
        OFN_ENABLEHOOK = &20
        OFN_EXPLORER = &80000
        xOFN% = 400
        yOFN% = 100
        DIM fs{lStructSize%, hwndOwner%, hInstance%, lpstrFilter%, \
        \      lpstrCustomFilter%, nMaxCustFilter%, nFilterIndex%, \
        \      lpstrFile%, nMaxFile%, lpstrFileTitle%, \
        \      nMaxFileTitle%, lpstrInitialDir%, lpstrTitle%, \
        \      flags%, nFileOffset{l&,h&}, nFileExtension{l&,h&}, \
        \      lpstrDefExt%, lCustData%, lpfnHook%, lpTemplateName%, \
        \      pvReserved%, dwReserved%, FlagsEx%}
        DIM fp{t&(260)}
        ff$ = "All files"+CHR$0+"*.*"+CHR$0+CHR$0
        fs.lStructSize% = DIM(fs{})
        fs.hwndOwner% = @hwnd%
        fs.lpstrFilter% = !^ff$
        fs.lpstrFile% = fp{}
        fs.nMaxFile% = 260
        fs.lpfnHook% = FN_callback(FN_OFNHookProc(), 4)
        SYS FN_syscalls("GetOpenFileName"), fs{} TO !FN_systo(result%)
        IF result% THEN
          filename$ = $$fp{}
          PRINT filename$
        DEF FN_OFNHookProc(hdlg%, uiMsg%, wParam%, lParam%)
        IF uiMsg% <> WM_INITDIALOG THEN = 0
        SYS "GetParent", hdlg% TO hdlg%
        SYS "SetWindowPos",hdlg%,0,xOFN%,yOFN%,0,0,SWP_NOSIZE OR SWP_NOZORDER
        = 0

The xOFN% and yOFN% global variables determine the position at which the dialogue box opens.

Unfortunately a side-effect is that the appearance of the dialogue will change from the 'modern' style to the 'classic' style, because Windows assumes that the HookProc is possibly being used to customise the layout.

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
setting_20the_20position_20of_20the_20file_20open_20dialogue.txt · Last modified: 2018/04/15 17:28 by richardrussell