Windows2003-3790/windows/advcore/gdiplus/test/emfdcode/cmndlg.c
2020-09-30 16:53:55 +02:00

339 lines
8.6 KiB
C

/***********************************************************************
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);
}