|
|
/***********************************************************************
MODULE : CMNDLG.C
FUNCTIONS :
COMMENTS :
************************************************************************/
#include "windows.h"
#include "mfdcod32.h"
/**************************************************************************
Function: InitializeStruct(WORD, LPSTR)
Purpose: To initialize a structure for the current common dialog. This routine is called just before the common dialogs API is called.
Returns: void
Comments:
History: Date Author Reason -------- --------- -----------------------------------
10/01/91 gregk Created 11/25/91 denniscr mod for purposes of this app 7/9/93 denniscr modified for win32 and emf
**************************************************************************/
void InitializeStruct(wCommDlgType, lpStruct, lpszFilter) WORD wCommDlgType; LPSTR lpStruct; LPSTR lpszFilter; { LPFOCHUNK lpFOChunk; LPFSCHUNK lpFSChunk;
switch (wCommDlgType) { case FILEOPENDLG:
lpFOChunk = (LPFOCHUNK)lpStruct;
*(lpFOChunk->szFile) = 0; *(lpFOChunk->szFileTitle) = 0; lpFOChunk->of.lStructSize = OPENFILENAME_SIZE_VERSION_400; lpFOChunk->of.hwndOwner = (HWND)hWndMain; lpFOChunk->of.hInstance = (HANDLE)NULL; lpFOChunk->of.lpstrFilter = gszFilter; lpFOChunk->of.lpstrCustomFilter = (LPSTR)NULL; lpFOChunk->of.nMaxCustFilter = 0L; lpFOChunk->of.nFilterIndex = 1L; lpFOChunk->of.lpstrFile = lpFOChunk->szFile; lpFOChunk->of.nMaxFile = (DWORD)sizeof(lpFOChunk->szFile); lpFOChunk->of.lpstrFileTitle = lpFOChunk->szFileTitle; lpFOChunk->of.nMaxFileTitle = 256; lpFOChunk->of.lpstrInitialDir = (LPSTR)NULL; lpFOChunk->of.lpstrTitle = (LPSTR)NULL; lpFOChunk->of.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; lpFOChunk->of.nFileOffset = 0; lpFOChunk->of.nFileExtension = 0; lpFOChunk->of.lpstrDefExt = (LPSTR)NULL; lpFOChunk->of.lCustData = 0L; lpFOChunk->of.lpfnHook = (LPOFNHOOKPROC)NULL; lpFOChunk->of.lpTemplateName = (LPSTR)NULL;
break;
case FILESAVEDLG:
lpFSChunk = (LPFSCHUNK)lpStruct;
*(lpFSChunk->szFile) = 0; *(lpFSChunk->szFileTitle) = 0; lpFSChunk->of.lStructSize = 0x4C; //OPENFILENAME_SIZE_VERSION_400
lpFSChunk->of.hwndOwner = (HWND)hWndMain; lpFSChunk->of.hInstance = (HANDLE)NULL; lpFSChunk->of.lpstrFilter = lpszFilter; lpFSChunk->of.lpstrCustomFilter = (LPSTR)NULL; lpFSChunk->of.nMaxCustFilter = 0L; lpFSChunk->of.nFilterIndex = 1L; lpFSChunk->of.lpstrFile = lpFSChunk->szFile; lpFSChunk->of.nMaxFile = (DWORD)sizeof(lpFSChunk->szFile); lpFSChunk->of.lpstrFileTitle = lpFSChunk->szFileTitle; lpFSChunk->of.nMaxFileTitle = 256; lpFSChunk->of.lpstrInitialDir = (LPSTR)NULL; lpFSChunk->of.lpstrTitle = (LPSTR)NULL; lpFSChunk->of.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; lpFSChunk->of.nFileOffset = 0; lpFSChunk->of.nFileExtension = 0; lpFSChunk->of.lpstrDefExt = (LPSTR)"EMF"; lpFSChunk->of.lCustData = 0L; lpFSChunk->of.lpfnHook = (LPOFNHOOKPROC)NULL; lpFSChunk->of.lpTemplateName = (LPSTR)NULL;
break;
default:
break;
}
return; }
/***********************************************************************
FUNCTION : SplitPath
PARAMETERS : LPSTR lpszFileName LPSTR lpszDrive LPSTR lpszDir LPSTR lpszFname LPSTR lpszExt
PURPOSE : split the fully qualified path into its components
CALLS : WINDOWS none
APP none
MESSAGES : none
RETURNS : void
COMMENTS :
HISTORY : 1/16/91 - created - drc
************************************************************************/
void SplitPath( lpszFileName, lpszDrive, lpszDir, lpszFname, lpszExt) LPSTR lpszFileName; LPSTR lpszDrive; LPSTR lpszDir; LPSTR lpszFname; LPSTR lpszExt; { char szPath[MAXFILTERLEN]; LPSTR lpszPath; LPSTR lpszTemp; int nFileNameLen = nExtOffset - (nFileOffset + 1); int i;
/* init ptrs */ lpszPath = szPath; lpszTemp = lpszFileName;
/* pick off the path */ for (i = 0; i < nFileOffset; i++, lpszTemp++, lpszPath++) *lpszPath = *lpszTemp; *lpszPath = '\0';
lpszPath = szPath;
/* pick off the drive designator */ for (i = 0; i < 2; i++, lpszPath++, lpszDrive++) *lpszDrive = *lpszPath; *lpszDrive = '\0';
/* pick off the directory */ while (*lpszPath != '\0') *lpszDir++ = *lpszPath++; *lpszDir = '\0';
/* reset temp ptr */ lpszTemp = lpszFileName;
/* index to filename */ lpszTemp += nFileOffset;
/* pick off the filename */ for (i = 0; i < nFileNameLen; i++, lpszTemp++, lpszFname++) *lpszFname = *lpszTemp; *lpszFname = '\0';
/* reset temp ptr */ lpszTemp = lpszFileName;
/* index to file extension */ lpszTemp += nExtOffset;
/* pick off the ext */ while (*lpszTemp != '\0') *lpszExt++ = *lpszTemp++; *lpszExt = '\0';
}
/***********************************************************************
FUNCTION : OpenFileDialog
PARAMETERS : LPSTR lpszOpenName
PURPOSE : init the OPENFILE structure and call the file open common dialog
CALLS : WINDOWS GlobalAlloc GlobalLock GlobalFree wsprintf GetOpenFileName
APP InitializeStruct
MESSAGES : none
RETURNS : int (see returns for GetOpenFileName)
COMMENTS :
HISTORY : 11/25/91 - created - drc
************************************************************************/
int OpenFileDialog(lpszOpenName) LPSTR lpszOpenName;
{ int nRet; HANDLE hChunk; LPFOCHUNK lpFOChunk;
hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
if (hChunk) { lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk); if (!lpFOChunk) { GlobalFree(hChunk); lpFOChunk=NULL; return(0); } } else { lpFOChunk=NULL; return(0); }
InitializeStruct(FILEOPENDLG, (LPSTR)lpFOChunk, NULL);
nRet = GetOpenFileName( &(lpFOChunk->of) );
if (nRet) { wsprintf(lpszOpenName, (LPSTR)"%s", lpFOChunk->of.lpstrFile); nExtOffset = lpFOChunk->of.nFileExtension; nFileOffset = lpFOChunk->of.nFileOffset; }
GlobalUnlock(hChunk); GlobalFree(hChunk);
return(nRet);
}
/***********************************************************************
FUNCTION : SaveFileDialog
PARAMETERS : LPSTR lpszOpenName
PURPOSE : init the OPENFILE structure and call the file open common dialog
CALLS : WINDOWS GlobalAlloc GlobalLock GlobalFree wsprintf GetOpenFileName
APP InitializeStruct
MESSAGES : none
RETURNS : int (see returns for GetSaveFileName)
COMMENTS : this could easily be merged with OpenFileDialog. This would decrease the redundancy but this is more illustrative.
HISTORY : 11/25/91 - created - drc
************************************************************************/
int SaveFileDialog(lpszSaveName, lpszFilter) LPSTR lpszSaveName; LPSTR lpszFilter;
{ int nRet; HANDLE hChunk; LPFOCHUNK lpFOChunk;
hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
if (hChunk) { lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk); if (!lpFOChunk) { GlobalFree(hChunk); lpFOChunk=NULL; return(0); } } else { lpFOChunk=NULL; return(0); }
InitializeStruct(FILESAVEDLG, (LPSTR)lpFOChunk, lpszFilter);
nRet = GetSaveFileName( &(lpFOChunk->of) );
if (nRet) wsprintf(lpszSaveName, (LPSTR)"%s", lpFOChunk->of.lpstrFile);
GlobalUnlock(hChunk); GlobalFree(hChunk);
return(nRet);
}
|