#include "ot4xb.ch"
//-------------------------------------------------------------------------------------------------------------------------
#define  OFN_EX_NOPLACESBAR         0x00000001
#define OFN_READONLY                 0x00000001
#define OFN_OVERWRITEPROMPT          0x00000002
#define OFN_HIDEREADONLY             0x00000004
#define OFN_NOCHANGEDIR              0x00000008
#define OFN_SHOWHELP                 0x00000010
#define OFN_ENABLEHOOK               0x00000020
#define OFN_ENABLETEMPLATE           0x00000040
#define OFN_ENABLETEMPLATEHANDLE     0x00000080
#define OFN_NOVALIDATE               0x00000100
#define OFN_ALLOWMULTISELECT         0x00000200
#define OFN_EXTENSIONDIFFERENT       0x00000400
#define OFN_PATHMUSTEXIST            0x00000800
#define OFN_FILEMUSTEXIST            0x00001000
#define OFN_CREATEPROMPT             0x00002000
#define OFN_SHAREAWARE               0x00004000
#define OFN_NOREADONLYRETURN         0x00008000
#define OFN_NOTESTFILECREATE         0x00010000
#define OFN_NONETWORKBUTTON          0x00020000
#define OFN_NOLONGNAMES              0x00040000
#define OFN_EXPLORER                 0x00080000
#define OFN_NODEREFERENCELINKS       0x00100000
#define OFN_ENABLEINCLUDENOTIFY      0x00400000
#define OFN_ENABLESIZING             0x00800000
#define OFN_DONTADDTORECENT          0x02000000
#define OFN_FORCESHOWHIDDEN          0x10000000
//-------------------------------------------------------------------------------------------------------------------------
proc main()
local oOfn := OPENFILENAME():New()
local cFile
oOfn:lStructSize        := oOFn:_sizeof_()
oOFn:hwndOwner          := SetAppWindow():GetHWnd()
oOfn:lpstrFilter        := Array2pSzz( {"All Files","*.*","Xbase++ Source Files","*.prg;*.ch;*.xpj"})
oOfn:nFilterIndex       := 1
oOfn:lpstrFile          := _xgrab(1024)
oOfn:nMaxFile           := 1024
oOfn:lpstrInitialDir    := _xgrab( cAppPath() )
oOfn:Flags              := nOr( OFN_EXPLORER  , OFN_ENABLESIZING )

? "Testing GetOpenFileName()"
Delegated_FpQCall({"comdlg32","GetOpenFileNameA"},"__bo__pt", oOFn )
? cPrintf( "File Selected: [%s]",oOfn:lpstrFile )

? "Testing GetSaveFileName()"
_bset(oOfn:lpstrFile,0,1024) // reset filename buffer
Delegated_FpQCall({"comdlg32","GetSaveFileNameA"},"__bo__pt", oOFn )
? cPrintf( "File Selected: [%s]",oOfn:lpstrFile )

// cleanup
_xfree( oOfn:lpstrFilter     )
_xfree( oOfn:lpstrFile       )
_xfree( oOfn:lpstrInitialDir )
inkey(0)

return 
//-------------------------------------------------------------------------------------------------------------------------
BEGIN STRUCTURE OPENFILENAME
   MEMBER DWORD         lStructSize 
   MEMBER HWND          hwndOwner 
   MEMBER DWORD         hInstance 
   MEMBER LPSTR         lpstrFilter 
   MEMBER LPSTR         lpstrCustomFilter 
   MEMBER DWORD         nMaxCustFilter 
   MEMBER DWORD         nFilterIndex 
   MEMBER LPSTR         lpstrFile 
   MEMBER DWORD         nMaxFile 
   MEMBER LPSTR         lpstrFileTitle 
   MEMBER DWORD         nMaxFileTitle 
   MEMBER LPSTR         lpstrInitialDir 
   MEMBER LPSTR         lpstrTitle 
   MEMBER DWORD         Flags 
   MEMBER WORD          nFileOffset 
   MEMBER WORD          nFileExtension 
   MEMBER LPSTR         lpstrDefExt 
   MEMBER LPARAM        lCustData 
   MEMBER DWORD         lpfnHook 
   MEMBER LPSTR         lpTemplateName 
   MEMBER POINTER32     pvReserved
   MEMBER DWORD         dwReserved
   MEMBER DWORD         FlagsEx
END STRUCTURE