home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / xped4 / xped4abd.cpp < prev    next >
C/C++ Source or Header  |  1994-02-13  |  5KB  |  172 lines

  1. /*  Project xped4
  2.     
  3.     Copyright ⌐ 1993. All Rights Reserved.
  4.  
  5.     SUBSYSTEM:    xped4.exe Application
  6.     FILE:         xped4abd.cpp
  7.     AUTHOR:       
  8.  
  9.  
  10.     OVERVIEW
  11.     ========
  12.     Source file for implementation of XpEd4AboutDlg (TDialog).      
  13. */
  14.  
  15.  
  16. #include <owl\owlpch.h>
  17. #pragma hdrstop
  18.  
  19. #include <owl\static.h>
  20.  
  21. #include <ver.h>
  22.  
  23. #include "xped4app.h"
  24. #include "xped4abd.h"
  25.  
  26.  
  27. // Reading the VERSIONINFO resource.
  28. class ProjectRCVersion {
  29. public:
  30.     ProjectRCVersion (TModule *module);
  31.     virtual ~ProjectRCVersion ();
  32.  
  33.     BOOL GetProductName (LPSTR &prodName);
  34.     BOOL GetProductVersion (LPSTR &prodVersion);
  35.     BOOL GetCopyright (LPSTR ©right);
  36.     BOOL GetDebug (LPSTR &debug);
  37.  
  38. protected:
  39.     LPBYTE      TransBlock;
  40.     void FAR    *FVData;
  41.  
  42. private:
  43.     // Don't allow this object to be copied.
  44.     ProjectRCVersion (const ProjectRCVersion &);
  45.     ProjectRCVersion & operator =(const ProjectRCVersion &);
  46. };
  47.  
  48.  
  49. ProjectRCVersion::ProjectRCVersion (TModule *module)
  50. {
  51.     char    appFName[255];
  52.     DWORD   fvHandle;
  53.     UINT    vSize;
  54.  
  55.     FVData = 0;
  56.  
  57.     module->GetModuleFileName(appFName, sizeof(appFName));
  58.     DWORD dwSize = GetFileVersionInfoSize(appFName, &fvHandle);
  59.     if (dwSize) {
  60.         FVData  = (void FAR *)new char[(UINT)dwSize];
  61.         if (GetFileVersionInfo(appFName, fvHandle, dwSize, FVData))
  62.             if (!VerQueryValue(FVData, "\\VarFileInfo\\Translation", (void FAR* FAR*)&TransBlock, &vSize)) {
  63.                 delete FVData;
  64.                 FVData = 0;
  65.             }
  66.     }
  67. }
  68.  
  69.  
  70. ProjectRCVersion::~ProjectRCVersion ()
  71. {
  72.     if (FVData)
  73.         delete FVData;
  74. }
  75.  
  76.  
  77. BOOL ProjectRCVersion::GetProductName (LPSTR &prodName)
  78. {
  79.     UINT    vSize;
  80.     char    subBlockName[255];
  81.  
  82.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductName");
  83.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodName, &vSize) : FALSE;
  84. }
  85.  
  86.  
  87. BOOL ProjectRCVersion::GetProductVersion (LPSTR &prodVersion)
  88. {
  89.     UINT    vSize;
  90.     char    subBlockName[255];
  91.  
  92.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductVersion");
  93.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodVersion, &vSize) : FALSE;
  94. }
  95.  
  96.  
  97. BOOL ProjectRCVersion::GetCopyright (LPSTR ©right)
  98. {
  99.     UINT    vSize;
  100.     char    subBlockName[255];
  101.  
  102.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"LegalCopyright");
  103.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)©right, &vSize) : FALSE;
  104. }
  105.  
  106.  
  107. BOOL ProjectRCVersion::GetDebug (LPSTR &debug)
  108. {
  109.     UINT    vSize;
  110.     char    subBlockName[255];
  111.  
  112.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"SpecialBuild");
  113.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&debug, &vSize) : FALSE;
  114. }
  115.  
  116.  
  117. //{{XpEd4AboutDlg Implementation}}
  118.  
  119.  
  120. //////////////////////////////////////////////////////////
  121. // XpEd4AboutDlg
  122. // ==========
  123. // Construction/Destruction handling.
  124. XpEd4AboutDlg::XpEd4AboutDlg (TWindow *parent, TResId resId, TModule *module)
  125.     : TDialog(parent, resId, module)
  126. {
  127.     // INSERT>> Your constructor code here.
  128. }
  129.  
  130.  
  131. XpEd4AboutDlg::~XpEd4AboutDlg ()
  132. {
  133.     Destroy();
  134.  
  135.     // INSERT>> Your destructor code here.
  136. }
  137.  
  138.  
  139. void XpEd4AboutDlg::SetupWindow ()
  140. {
  141.     LPSTR prodName, prodVersion, copyright, debug;
  142.  
  143.     // Get the static text who's value is based on VERSIONINFO.
  144.     TStatic *versionCtrl = new TStatic(this, IDC_VERSION, 255);
  145.     TStatic *copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
  146.     TStatic *debugCtrl = new TStatic(this, IDC_DEBUG, 255);
  147.  
  148.     TDialog::SetupWindow();
  149.  
  150.     // Process the VERSIONINFO.
  151.     ProjectRCVersion applVersion(GetModule());
  152.  
  153.     // Get the product name, product version and legal copyright strings.
  154.     applVersion.GetProductName(prodName);
  155.     applVersion.GetProductVersion(prodVersion);
  156.     applVersion.GetCopyright(copyright);
  157.  
  158.     // IDC_VERSION is the product name and version number, the initial value of IDC_VERSION is
  159.     // the word Version (in whatever language) product name VERSION product version.
  160.     char    buffer[255];
  161.     char    versionName[128];
  162.     versionCtrl->GetText(versionName, sizeof(versionName));
  163.     wsprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
  164.     versionCtrl->SetText(buffer);
  165.  
  166.     copyrightCtrl->SetText(copyright);
  167.  
  168.     // Only get the SpecialBuild text if the VERSIONINFO resource is there.
  169.     if (applVersion.GetDebug(debug))
  170.         debugCtrl->SetText(debug);
  171. }
  172.