home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 19.ddi / SAMPLES / WMFDCODE / CMNDLG.C_ / CMNDLG.C
Encoding:
C/C++ Source or Header  |  1993-02-08  |  7.9 KB  |  338 lines

  1. /***********************************************************************
  2.  
  3.   MODULE     : CMNDLG.C
  4.  
  5.   FUNCTIONS  :
  6.  
  7.   COMMENTS   :
  8.  
  9. ************************************************************************/
  10.  
  11. #include "windows.h"
  12. #include "wmfdcode.h"
  13.  
  14. /**************************************************************************
  15.  
  16.   Function:  InitializeStruct(WORD, LPSTR)
  17.  
  18.    Purpose:  To initialize a structure for the current common dialog.
  19.          This routine is called just before the common dialogs
  20.          API is called.
  21.  
  22.    Returns:  void
  23.  
  24.   Comments:
  25.  
  26.    History:  Date      Author       Reason
  27.          --------  ---------   -----------------------------------
  28.  
  29.           10/01/91    gregk        Created
  30.           11/25/91    denniscr    mod for purposes of this app
  31.  
  32. **************************************************************************/
  33.  
  34. void InitializeStruct(wCommDlgType, lpStruct)
  35. WORD wCommDlgType;
  36. LPSTR lpStruct;
  37. {
  38.    LPFOCHUNK           lpFOChunk;
  39.    LPFSCHUNK           lpFSChunk;
  40.    
  41.    switch (wCommDlgType)
  42.       {
  43.       case FILEOPENDLG:
  44.  
  45.      lpFOChunk = (LPFOCHUNK)lpStruct;
  46.  
  47.      *(lpFOChunk->szFile)            = 0;
  48.      *(lpFOChunk->szFileTitle)       = 0;
  49.      lpFOChunk->of.lStructSize       = sizeof(OPENFILENAME);
  50.      lpFOChunk->of.hwndOwner         = (HWND)hWndMain;
  51.      lpFOChunk->of.hInstance         = (HANDLE)NULL;
  52.      lpFOChunk->of.lpstrFilter       = gszFilter;
  53.      lpFOChunk->of.lpstrCustomFilter = (LPSTR)NULL;
  54.      lpFOChunk->of.nMaxCustFilter    = 0L;
  55.      lpFOChunk->of.nFilterIndex      = 1L;
  56.      lpFOChunk->of.lpstrFile         = lpFOChunk->szFile;
  57.      lpFOChunk->of.nMaxFile          = (DWORD)sizeof(lpFOChunk->szFile);
  58.      lpFOChunk->of.lpstrFileTitle    = lpFOChunk->szFileTitle;
  59.      lpFOChunk->of.nMaxFileTitle     = 256;
  60.      lpFOChunk->of.lpstrInitialDir     = (LPSTR)NULL;
  61.      lpFOChunk->of.lpstrTitle        = (LPSTR)NULL;
  62.      lpFOChunk->of.Flags             = OFN_HIDEREADONLY |
  63.                        OFN_PATHMUSTEXIST |
  64.                        OFN_FILEMUSTEXIST;
  65.      lpFOChunk->of.nFileOffset       = 0;
  66.      lpFOChunk->of.nFileExtension    = 0;
  67.      lpFOChunk->of.lpstrDefExt       = (LPSTR)NULL;
  68.      lpFOChunk->of.lCustData         = 0L;
  69.      lpFOChunk->of.lpfnHook      = (FARHOOK)NULL;
  70.      lpFOChunk->of.lpTemplateName    = (LPSTR)NULL;
  71.  
  72.      break;
  73.  
  74.       case FILESAVEDLG:
  75.  
  76.      lpFSChunk = (LPFSCHUNK)lpStruct;
  77.  
  78.      *(lpFSChunk->szFile)            = 0;
  79.      *(lpFSChunk->szFileTitle)     = 0;
  80.      lpFSChunk->of.lStructSize     = sizeof(OPENFILENAME);
  81.      lpFSChunk->of.hwndOwner         = (HWND)hWndMain;
  82.      lpFSChunk->of.hInstance     = (HANDLE)NULL;
  83.      lpFSChunk->of.lpstrFilter     = (LPSTR)"Windows Metafile\0DEFAULT.WMF\0";
  84.      lpFSChunk->of.lpstrCustomFilter = (LPSTR)NULL;
  85.      lpFSChunk->of.nMaxCustFilter    = 0L;
  86.      lpFSChunk->of.nFilterIndex      = 1L;
  87.      lpFSChunk->of.lpstrFile     = lpFSChunk->szFile;
  88.      lpFSChunk->of.nMaxFile          = (DWORD)sizeof(lpFSChunk->szFile);
  89.      lpFSChunk->of.lpstrFileTitle     = lpFSChunk->szFileTitle;
  90.      lpFSChunk->of.nMaxFileTitle     = 256;
  91.      lpFSChunk->of.lpstrInitialDir     = (LPSTR)NULL;
  92.      lpFSChunk->of.lpstrTitle        = (LPSTR)NULL;
  93.      lpFSChunk->of.Flags         = OFN_HIDEREADONLY |
  94.                        OFN_OVERWRITEPROMPT;
  95.  
  96.  
  97.      lpFSChunk->of.nFileOffset       = 0;
  98.      lpFSChunk->of.nFileExtension    = 0;
  99.      lpFSChunk->of.lpstrDefExt       = (LPSTR)"WMF";
  100.      lpFSChunk->of.lCustData         = 0L;
  101.      lpFSChunk->of.lpfnHook      = (FARHOOK)NULL;
  102.      lpFSChunk->of.lpTemplateName    = (LPSTR)NULL;
  103.  
  104.      break;
  105.  
  106.       default:
  107.  
  108.      break;
  109.  
  110.       }
  111.  
  112.    return;
  113. }
  114.  
  115. /***********************************************************************
  116.  
  117.   FUNCTION   : SplitPath
  118.  
  119.   PARAMETERS : LPSTR lpszFileName
  120.            LPSTR lpszDrive
  121.            LPSTR lpszDir
  122.            LPSTR lpszFname
  123.            LPSTR lpszExt
  124.  
  125.   PURPOSE    : split the fully qualified path into its components
  126.  
  127.   CALLS      : WINDOWS
  128.          none
  129.  
  130.                APP
  131.          none
  132.  
  133.   MESSAGES   : none
  134.  
  135.   RETURNS    : void
  136.  
  137.   COMMENTS   :
  138.  
  139.   HISTORY    : 1/16/91 - created - drc
  140.  
  141. ************************************************************************/
  142.  
  143. void SplitPath( lpszFileName, lpszDrive, lpszDir, lpszFname, lpszExt)
  144. LPSTR lpszFileName;
  145. LPSTR lpszDrive;
  146. LPSTR lpszDir;
  147. LPSTR lpszFname;
  148. LPSTR lpszExt;
  149. {
  150.   char    szPath[MAXFILTERLEN];
  151.   LPSTR lpszPath;
  152.   LPSTR lpszTemp;
  153.   int    nFileNameLen = nExtOffset - (nFileOffset + 1);
  154.   int    i;
  155.  
  156.   /* init ptrs */
  157.   lpszPath = szPath;
  158.   lpszTemp = lpszFileName;
  159.  
  160.   /* pick off the path */
  161.   for (i = 0; i < nFileOffset; i++, lpszTemp++, lpszPath++)
  162.     *lpszPath = *lpszTemp;
  163.   *lpszPath = '\0';
  164.  
  165.   lpszPath = szPath;
  166.  
  167.   /* pick off the drive designator */
  168.   for (i = 0; i < 2; i++, lpszPath++, lpszDrive++)
  169.     *lpszDrive = *lpszPath;
  170.   *lpszDrive = '\0';
  171.  
  172.   /* pick off the directory */
  173.   while (*lpszPath != '\0')
  174.     *lpszDir++ = *lpszPath++;
  175.   *lpszDir = '\0';
  176.  
  177.   /* reset temp ptr */
  178.   lpszTemp = lpszFileName;
  179.  
  180.   /* index to filename */
  181.   lpszTemp += nFileOffset;
  182.  
  183.   /* pick off the filename */
  184.   for (i = 0; i < nFileNameLen; i++, lpszTemp++, lpszFname++)
  185.     *lpszFname = *lpszTemp;
  186.   *lpszFname = '\0';
  187.  
  188.   /* reset temp ptr */
  189.   lpszTemp = lpszFileName;
  190.  
  191.   /* index to file extension */
  192.   lpszTemp += nExtOffset;
  193.  
  194.   /* pick off the ext */
  195.   while (*lpszTemp != '\0')
  196.     *lpszExt++ = *lpszTemp++;
  197.   *lpszExt = '\0';
  198.  
  199. }
  200.  
  201. /***********************************************************************
  202.  
  203.   FUNCTION   : OpenFileDialog
  204.  
  205.   PARAMETERS : LPSTR lpszOpenName
  206.  
  207.   PURPOSE    : init the OPENFILE structure and call the file open
  208.            common dialog
  209.  
  210.   CALLS      : WINDOWS
  211.          GlobalAlloc
  212.          GlobalLock
  213.          GlobalFree
  214.          wsprintf
  215.          GetOpenFileName
  216.  
  217.                APP
  218.          InitializeStruct
  219.  
  220.   MESSAGES   : none
  221.  
  222.   RETURNS    : int (see returns for GetOpenFileName)
  223.  
  224.   COMMENTS   :
  225.  
  226.   HISTORY    : 11/25/91 - created - drc
  227.  
  228. ************************************************************************/
  229.  
  230. int OpenFileDialog(lpszOpenName)
  231. LPSTR lpszOpenName;
  232.  
  233. {
  234.    int         nRet;
  235.    HANDLE    hChunk;
  236.    LPFOCHUNK lpFOChunk;
  237.  
  238.    hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
  239.  
  240.    if (hChunk)  {
  241.       lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk);
  242.       if (!lpFOChunk)  {
  243.      GlobalFree(hChunk);
  244.      lpFOChunk=NULL;
  245.      return(0);
  246.       }
  247.    }
  248.    else {
  249.       lpFOChunk=NULL;
  250.       return(0);
  251.    }
  252.  
  253.  
  254.    InitializeStruct(FILEOPENDLG, (LPSTR)lpFOChunk);
  255.  
  256.    nRet = GetOpenFileName( &(lpFOChunk->of) );
  257.  
  258.    if (nRet)  {
  259.       wsprintf(lpszOpenName, (LPSTR)"%s", lpFOChunk->of.lpstrFile);
  260.       nExtOffset =  lpFOChunk->of.nFileExtension;
  261.       nFileOffset = lpFOChunk->of.nFileOffset;
  262.    }
  263.  
  264.    GlobalUnlock(hChunk);
  265.    GlobalFree(hChunk);
  266.  
  267.    return(nRet);
  268.  
  269. }
  270.  
  271. /***********************************************************************
  272.  
  273.   FUNCTION   : SaveFileDialog
  274.  
  275.   PARAMETERS : LPSTR lpszOpenName
  276.  
  277.   PURPOSE    : init the OPENFILE structure and call the file open
  278.            common dialog
  279.  
  280.   CALLS      : WINDOWS
  281.          GlobalAlloc
  282.          GlobalLock
  283.          GlobalFree
  284.          wsprintf
  285.          GetOpenFileName
  286.  
  287.                APP
  288.          InitializeStruct
  289.  
  290.   MESSAGES   : none
  291.  
  292.   RETURNS    : int (see returns for GetSaveFileName)
  293.  
  294.   COMMENTS   : this could easily be merged with OpenFileDialog.  This
  295.            would decrease the redundancy but this is more illustrative.
  296.  
  297.   HISTORY    : 11/25/91 - created - drc
  298.  
  299. ************************************************************************/
  300.  
  301. int SaveFileDialog(lpszSaveName)
  302. LPSTR lpszSaveName;
  303.  
  304. {
  305.    int         nRet;
  306.    HANDLE    hChunk;
  307.    LPFOCHUNK lpFOChunk;
  308.  
  309.    hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
  310.  
  311.    if (hChunk)  {
  312.       lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk);
  313.       if (!lpFOChunk)  {
  314.      GlobalFree(hChunk);
  315.      lpFOChunk=NULL;
  316.      return(0);
  317.       }
  318.    }
  319.    else {
  320.       lpFOChunk=NULL;
  321.       return(0);
  322.    }
  323.  
  324.  
  325.    InitializeStruct(FILESAVEDLG, (LPSTR)lpFOChunk);
  326.  
  327.    nRet = GetSaveFileName( &(lpFOChunk->of) );
  328.  
  329.    if (nRet)
  330.       wsprintf(lpszSaveName, (LPSTR)"%s", lpFOChunk->of.lpstrFile);
  331.  
  332.    GlobalUnlock(hChunk);
  333.    GlobalFree(hChunk);
  334.  
  335.    return(nRet);
  336.  
  337. }
  338.