home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / perfmon / fileopen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-13  |  12.9 KB  |  427 lines

  1. #include "perfmon.h"
  2. #include "cderr.h"
  3.  
  4. #include "alert.h"      // for OpenAlert
  5. #include "fileutil.h"   // for FileOpen, FileRead
  6. #include "grafdata.h"   // for OpenChart
  7. #include "log.h"        // for OpenLog
  8. #include "report.h"     // for OpenReport
  9. #include "utils.h"      // for strempty
  10. #include "perfmops.h"   // for OpenWorkspace
  11. #include "pmhelpid.h"   // Help IDs
  12. #include <dlgs.h>       // for pshHelp
  13.  
  14. #define OptionsOFNStyle \
  15.    (OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK)
  16.  
  17. #define ExportOptionsOFNStyle                   \
  18.    (OFN_ENABLETEMPLATE | OFN_HIDEREADONLY |     \
  19.     OFN_SHOWHELP | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT)
  20.  
  21. extern BOOL APIENTRY ExportOptionsHookProc (HWND hDlg, UINT iMessage, 
  22.                                             WPARAM wParam, LPARAM lParam) ;
  23.  
  24. BOOL APIENTRY FileOpenHookProc (HWND hDlg, 
  25.                                 UINT iMessage, 
  26.                                 WPARAM wParam, 
  27.                                 LPARAM lParam)
  28. {
  29.    BOOL     bHandled = FALSE ;
  30.    
  31.    // only intercept the Help button and bring up our WinHelp data
  32.    if (iMessage == WM_COMMAND && wParam == pshHelp)
  33.       {
  34.       CallWinHelp (dwCurrentDlgID) ;
  35.       bHandled = TRUE ;
  36.       }
  37.    else if (iMessage == WM_INITDIALOG)
  38.       {
  39.       WindowCenter (hDlg) ;
  40.       bHandled = TRUE ;
  41.       }
  42.  
  43.    return (bHandled) ;
  44. }
  45.  
  46.  
  47.  
  48. BOOL FileOpen (HWND hWndParent, int nStringResourceID, LPTSTR lpInputFileName)
  49.    {
  50.    OPENFILENAME   ofn ;
  51.    TCHAR          szFileSpec [FilePathLen] ;
  52.    TCHAR          szFileTitle [FilePathLen] ;
  53.    TCHAR          szDialogTitle [FilePathLen] ;
  54.    HANDLE         hFile ;
  55.    PERFFILEHEADER FileHeader ;
  56.    
  57.    TCHAR          aszOpenFilter[LongTextLen] ;
  58.    int            StringLength ;
  59.    BOOL           retCode ;
  60.    LPTSTR         pFileName = NULL ;
  61.  
  62.    if (strempty(lpInputFileName))
  63.       {
  64.  
  65.       dwCurrentDlgID = HC_PM_idDlgFileOpen ;
  66.  
  67.       // get the file extension strings
  68.       LoadString (hInstance, nStringResourceID, aszOpenFilter,
  69.          sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
  70.       StringLength = lstrlen (aszOpenFilter) + 1 ;
  71.       LoadString (hInstance, nStringResourceID+1,
  72.          &aszOpenFilter[StringLength],
  73.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  74.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  75.  
  76. #ifdef ADVANCED_PERFMON
  77.       // get workspace file extension strings
  78.       LoadString (hInstance, IDS_WORKSPACEFILE, 
  79.          &aszOpenFilter[StringLength],
  80.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  81.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  82.       LoadString (hInstance, IDS_WORKSPACEFILEEXT,
  83.          &aszOpenFilter[StringLength],
  84.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  85.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1;
  86. #endif
  87.  
  88.       // get all file extension strings
  89.       LoadString (hInstance, IDS_ALLFILES, 
  90.          &aszOpenFilter[StringLength],
  91.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  92.       StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  93.       LoadString (hInstance, IDS_ALLFILESEXT,
  94.          &aszOpenFilter[StringLength],
  95.          sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  96.       StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
  97.  
  98.       // setup the end strings
  99.       aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
  100.  
  101.       strclr (szFileSpec) ;
  102.       strclr (szFileTitle) ;
  103.  
  104.       StringLoad (IDS_FILEOPEN_TITLE, szDialogTitle) ;
  105.       memset (&ofn, 0, sizeof(OPENFILENAME)) ;
  106.       ofn.lStructSize = sizeof(OPENFILENAME) ;
  107.       ofn.hwndOwner = hWndParent ;
  108.       ofn.hInstance = hInstance;
  109.       ofn.lpstrTitle = szDialogTitle ;
  110.       ofn.lpstrFilter = aszOpenFilter ;
  111.       ofn.nFilterIndex = 1L ;
  112.  
  113.       ofn.lpstrFile = szFileSpec;
  114.       ofn.nMaxFile = sizeof(szFileSpec);
  115.       ofn.lpstrFileTitle = szFileTitle;
  116.       ofn.nMaxFileTitle = sizeof(szFileTitle);
  117.       ofn.Flags = OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK ;
  118.       ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
  119.  
  120.       if (!GetOpenFileName(&ofn))
  121.          {
  122.          dwCurrentDlgID = 0 ;
  123.          return (FALSE) ;
  124.          }
  125.  
  126.       dwCurrentDlgID = 0 ;
  127.  
  128.       hFile = FileHandleOpen (szFileSpec) ;
  129.       pFileName = szFileSpec ;
  130.  
  131.       }  // NULL lpFileName
  132.  
  133.    else
  134.       {
  135.       // open the input file
  136.       hFile = FileHandleOpen (lpInputFileName) ;
  137.       if (hFile && hFile != INVALID_HANDLE_VALUE &&
  138.           SearchPath (NULL, lpInputFileName, NULL,
  139.             sizeof(szFileSpec)/sizeof(TCHAR) - 1,
  140.             szFileSpec, &pFileName))
  141.          {
  142.          pFileName = szFileSpec ;
  143.          }
  144.       else
  145.          {
  146.          pFileName = NULL ;
  147.          }
  148.       }
  149.  
  150.    if (!hFile || hFile == INVALID_HANDLE_VALUE)
  151.       {
  152.       return (FALSE) ;
  153.       }
  154.  
  155.    if (!FileRead (hFile, &FileHeader, sizeof (FileHeader)))
  156.       {
  157.       CloseHandle (hFile) ;
  158.       if (strempty(lpInputFileName))
  159.          {
  160.          DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
  161.          }
  162.       return (FALSE) ;
  163.       }
  164.  
  165.  
  166.    //=============================//
  167.    // Chart File?                 //
  168.    //=============================//
  169.  
  170.    if (strsame (FileHeader.szSignature, szPerfChartSignature))
  171.       {
  172.       retCode = OpenChart (hWndGraph,
  173.                            hFile,
  174.                            FileHeader.dwMajorVersion,
  175.                            FileHeader.dwMinorVersion,
  176.                            TRUE) ;
  177.       if (retCode)
  178.          {
  179.          ChangeSaveFileName (pFileName, IDM_VIEWCHART) ;
  180.          }
  181.       else
  182.          {
  183.          goto ErrExit ;
  184.          }
  185.       return (retCode) ;
  186.       }
  187.  
  188. #ifdef ADVANCED_PERFMON
  189.    //=============================//
  190.    // Alert File?                 //
  191.    //=============================//
  192.  
  193.    if (strsame (FileHeader.szSignature, szPerfAlertSignature))
  194.       {
  195.       retCode = OpenAlert (hWndAlert,
  196.                            hFile,
  197.                            FileHeader.dwMajorVersion,
  198.                            FileHeader.dwMinorVersion,
  199.                            TRUE) ;
  200.       if (retCode)
  201.          {
  202.          ChangeSaveFileName (pFileName, IDM_VIEWALERT) ;
  203.          }
  204.       else
  205.          {
  206.          goto ErrExit ;
  207.          }
  208.  
  209.       return (retCode) ;
  210.       }
  211.  
  212.  
  213.    //=============================//
  214.    // Log File?                   //
  215.    //=============================//
  216.  
  217.    if (strsame (FileHeader.szSignature, szPerfLogSignature))
  218.       {
  219.       retCode = OpenLog (hWndLog,
  220.                          hFile,
  221.                          FileHeader.dwMajorVersion,
  222.                          FileHeader.dwMinorVersion,
  223.                          TRUE) ;
  224.       if (retCode)
  225.          {
  226.          ChangeSaveFileName (pFileName, IDM_VIEWLOG) ;
  227.          }
  228.       else
  229.          {
  230.          goto ErrExit ;
  231.          }
  232.  
  233.       return (retCode) ;
  234.       }
  235.  
  236.    //=============================//
  237.    // Report File?                //
  238.    //=============================//
  239.  
  240.    if (strsame (FileHeader.szSignature, szPerfReportSignature))
  241.       {
  242.       retCode = OpenReport (hWndReport,
  243.                             hFile,
  244.                             FileHeader.dwMajorVersion,
  245.                             FileHeader.dwMinorVersion,
  246.                             TRUE) ;
  247.       if (retCode)
  248.          {
  249.          ChangeSaveFileName (pFileName, IDM_VIEWREPORT) ;
  250.          }
  251.       else
  252.          {
  253.          goto ErrExit ;
  254.          }
  255.  
  256.       return (retCode) ;
  257.       }
  258.  
  259.    //=============================//
  260.    // Workspace File?             //
  261.    //=============================//
  262.  
  263.    if (strsame (FileHeader.szSignature, szPerfWorkspaceSignature))
  264.       {
  265.       retCode = OpenWorkspace (hFile,
  266.                                FileHeader.dwMajorVersion,
  267.                                FileHeader.dwMinorVersion) ;
  268.       if (retCode)
  269.          {
  270.          ChangeSaveFileName (pFileName, IDM_WORKSPACE) ;
  271.          return (TRUE) ;
  272.          }
  273.       else
  274.          {
  275.          goto ErrExit ;
  276.          }
  277.       }
  278. #endif
  279.  
  280.    //=============================//
  281.    // Unknown file type           //
  282.    //=============================//
  283.    CloseHandle (hFile) ;
  284.  
  285. ErrExit:
  286.  
  287.    DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
  288.    return (FALSE) ;
  289.    }  // FileOpen
  290.  
  291.  
  292. BOOL FileGetName (HWND hWndParent, int nStringResourceID, LPTSTR lpFileName)
  293.    {
  294.    OPENFILENAME   ofn ;
  295.    TCHAR          szFileSpec [FilePathLen] ;
  296.    TCHAR          szFileTitle [FilePathLen] ;
  297.    TCHAR          szDialogTitle [FilePathLen] ;
  298.    TCHAR          aszOpenFilter[LongTextLen] ;
  299.    int            StringLength ;
  300.  
  301.    if (lpFileName)
  302.       {
  303.  
  304.       if (nStringResourceID != IDS_EXPORTFILE)
  305.          {
  306.          // get the file extension strings
  307.          LoadString (hInstance, nStringResourceID,
  308.             aszOpenFilter,
  309.             sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
  310.          StringLength = lstrlen (aszOpenFilter) + 1 ;
  311.          LoadString (hInstance, nStringResourceID+1,
  312.             &aszOpenFilter[StringLength],
  313.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  314.  
  315.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  316.          // get all file extension strings
  317.          LoadString (hInstance, IDS_ALLFILES, 
  318.             &aszOpenFilter[StringLength],
  319.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  320.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  321.          LoadString (hInstance, IDS_ALLFILESEXT,
  322.             &aszOpenFilter[StringLength],
  323.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  324.          }
  325.       else
  326.          {
  327.          // get the Export file extension based on the current delimiter
  328.          int   FirstExtensionID, SecondExtensionID ;
  329.  
  330.          if (pDelimiter == TabStr)
  331.             {
  332.             FirstExtensionID = IDS_EXPORTFILETSV ;
  333.             SecondExtensionID = IDS_EXPORTFILE ;
  334.             }
  335.          else
  336.             {
  337.             FirstExtensionID = IDS_EXPORTFILE ;
  338.             SecondExtensionID = IDS_EXPORTFILETSV ;
  339.             }
  340.  
  341.          LoadString (hInstance, FirstExtensionID,
  342.             aszOpenFilter,
  343.             sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
  344.          StringLength = lstrlen (aszOpenFilter) + 1 ;
  345.          LoadString (hInstance, FirstExtensionID+1,
  346.             &aszOpenFilter[StringLength],
  347.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  348.  
  349.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  350.          // get all file extension strings
  351.          LoadString (hInstance, SecondExtensionID, 
  352.             &aszOpenFilter[StringLength],
  353.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  354.          StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
  355.          LoadString (hInstance, SecondExtensionID+1,
  356.             &aszOpenFilter[StringLength],
  357.             sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
  358.  
  359.          }
  360.  
  361.       // setup the end strings
  362.       StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
  363.       aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
  364.  
  365.       strclr (szFileSpec) ;
  366.       strclr (szFileTitle) ;
  367.  
  368.       if (nStringResourceID == IDS_EXPORTFILE)
  369.          {
  370.          dwCurrentDlgID = HC_PM_idDlgFileExport ;
  371.          StringLoad (IDS_EXPORTAS_TITLE, szDialogTitle) ;
  372.          }
  373.       else if (nStringResourceID == IDS_WORKSPACEFILE)
  374.          {
  375.          dwCurrentDlgID = HC_PM_idDlgFileSaveWorkSpace ;
  376.          StringLoad (IDS_SAVEASW_TITLE, szDialogTitle) ;
  377.          }
  378.       else
  379.          {
  380.          dwCurrentDlgID = HC_PM_idDlgFileSaveAs ;
  381.          StringLoad (IDS_SAVEAS_TITLE, szDialogTitle) ;
  382.          }
  383.  
  384.       memset (&ofn, 0, sizeof(OPENFILENAME)) ;
  385.       ofn.lStructSize = sizeof(OPENFILENAME) ;
  386.       ofn.hwndOwner = hWndParent ;
  387.       ofn.hInstance = hInstance;
  388.       ofn.lpstrTitle = szDialogTitle ;
  389.       ofn.lpstrFilter = aszOpenFilter ;
  390.       ofn.nFilterIndex = 1L ;
  391.  
  392.       ofn.lpstrFile = szFileSpec;
  393.       ofn.nMaxFile = sizeof(szFileSpec);
  394.       ofn.lpstrFileTitle = szFileTitle;
  395.       ofn.nMaxFileTitle = sizeof(szFileTitle);
  396.  
  397.       if (nStringResourceID == IDS_EXPORTFILE)
  398.          {
  399.          ofn.Flags = ExportOptionsOFNStyle ;
  400.          ofn.lpfnHook = (LPOFNHOOKPROC) ExportOptionsHookProc ;
  401.          ofn.lpTemplateName = idDlgExportOptions ;
  402.          }
  403.       else
  404.          {
  405.          ofn.Flags = OptionsOFNStyle ;
  406.          ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
  407.          }
  408.  
  409.       if (!GetSaveFileName(&ofn))
  410.          {
  411.          dwCurrentDlgID = 0 ;
  412.          return (FALSE) ;
  413.          }
  414.       dwCurrentDlgID = 0 ;
  415.       }
  416.    else
  417.       {
  418.       return (FALSE) ;
  419.       }
  420.  
  421.    lstrcpy (lpFileName, ofn.lpstrFile) ;
  422.  
  423.    return (TRUE) ;
  424.    } // FileGetName
  425.  
  426.  
  427.