home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / apxmdidv.pak / APXMDDAD.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  186 lines

  1. //----------------------------------------------------------------------------
  2. //  Project ApxMdiDv
  3. //  Borland International
  4. //  Copyright ⌐ 1996. All Rights Reserved.
  5. //
  6. //  SUBSYSTEM:    ApxMdiDv Application
  7. //  FILE:         apxmddad.cpp
  8. //  AUTHOR:       
  9. //
  10. //  OVERVIEW
  11. //  ~~~~~~~~
  12. //  Source file for implementation of TApxMdiDvAboutDlg (TDialog).
  13. //
  14. //----------------------------------------------------------------------------
  15.  
  16. #include <owl/pch.h>
  17. #include <stdio.h>
  18. #if defined(BI_PLAT_WIN16)
  19. # include <ver.h>
  20. #endif
  21.  
  22. #include "apxmddva.h"
  23. #include "apxmddad.h"
  24.  
  25.  
  26. TProjectRCVersion::TProjectRCVersion(TModule* module)
  27. {
  28.   uint32  fvHandle;
  29.   uint    vSize;
  30.   char    appFName[255];
  31.   TAPointer<char> subBlockName = new char[255];
  32.  
  33.   FVData = 0;
  34.  
  35.   module->GetModuleFileName(appFName, sizeof appFName);
  36.   OemToAnsi(appFName, appFName);
  37.   uint32 dwSize = ::GetFileVersionInfoSize(appFName, &fvHandle);
  38.   if (dwSize) {
  39.     FVData  = (void far *)new char[(uint)dwSize];
  40.     if (::GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) {
  41.       // Copy string to buffer so if the -dc compiler switch(Put constant strings in code segments)
  42.       // is on VerQueryValue will work under Win16.  This works around a problem in Microsoft's ver.dll
  43.       // which writes to the string pointed to by subBlockName.
  44.       //
  45.       strcpy(subBlockName, "\\VarFileInfo\\Translation");
  46.       if (!::VerQueryValue(FVData, subBlockName,(void far* far*)&TransBlock, &vSize)) {
  47.         delete[] FVData;
  48.         FVData = 0;
  49.       }
  50.       else
  51.         // Swap the words so sprintf will print the lang-charset in the correct format.
  52.         //
  53.         *(uint32 *)TransBlock = MAKELONG(HIWORD(*(uint32 *)TransBlock), LOWORD(*(uint32 *)TransBlock));
  54.     }
  55.   }
  56. }
  57.  
  58.  
  59. TProjectRCVersion::~TProjectRCVersion()
  60. {
  61.   if (FVData)
  62.     delete[] FVData;
  63. }
  64.  
  65.  
  66. bool TProjectRCVersion::GetProductName(LPSTR& prodName)
  67. {
  68.   uint    vSize;
  69.   TAPointer<char> subBlockName = new char[255];
  70.  
  71.   if (FVData) {
  72.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductName");
  73.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodName, &vSize) : false;
  74.   } else
  75.     return false;
  76. }
  77.  
  78.  
  79. bool TProjectRCVersion::GetProductVersion(LPSTR& prodVersion)
  80. {
  81.   uint    vSize;
  82.   TAPointer<char> subBlockName = new char[255];
  83.  
  84.   if (FVData) {
  85.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductVersion");
  86.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodVersion, &vSize) : false;
  87.   } else
  88.     return false;
  89. }
  90.  
  91.  
  92. bool TProjectRCVersion::GetCopyright(LPSTR& copyright)
  93. {
  94.   uint    vSize;
  95.   TAPointer<char> subBlockName = new char[255];
  96.  
  97.   if (FVData) {
  98.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"LegalCopyright");
  99.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)©right, &vSize) : false;
  100.   } else
  101.     return false;
  102. }
  103.  
  104.  
  105. bool TProjectRCVersion::GetDebug(LPSTR& debug)
  106. {
  107.   uint    vSize;
  108.   TAPointer<char> subBlockName = new char[255];
  109.  
  110.   if (FVData) {
  111.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"SpecialBuild");
  112.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&debug, &vSize) : false;
  113.   } else
  114.     return false;
  115. }
  116.  
  117.  
  118. //{{TApxMdiDvAboutDlg Implementation}}
  119.  
  120.  
  121. //--------------------------------------------------------
  122. // TApxMdiDvAboutDlg
  123. // ~~~~~~~~~~
  124. // Construction/Destruction handling.
  125. //
  126. TApxMdiDvAboutDlg::TApxMdiDvAboutDlg(TWindow* parent, TResId resId, TModule* module)
  127. :
  128.   TDialog(parent, resId, module)
  129. {
  130.   // INSERT>> Your constructor code here.
  131. }
  132.  
  133.  
  134. TApxMdiDvAboutDlg::~TApxMdiDvAboutDlg()
  135. {
  136.   Destroy();
  137.  
  138.   // INSERT>> Your destructor code here.
  139. }
  140.  
  141.  
  142. void TApxMdiDvAboutDlg::SetupWindow()
  143. {
  144.   LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0;
  145.  
  146.   // Get the static text for the value based on VERSIONINFO.
  147.   //
  148.   TStatic* versionCtrl = new TStatic(this, IDC_VERSION, 255);
  149.   TStatic* copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
  150.   TStatic* debugCtrl = new TStatic(this, IDC_DEBUG, 255);
  151.  
  152.   TDialog::SetupWindow();
  153.  
  154.   // Process the VERSIONINFO.
  155.   //
  156.   TProjectRCVersion applVersion(GetModule());
  157.  
  158.   // Get the product name and product version strings.
  159.   //
  160.   if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) {
  161.     // IDC_VERSION is the product name and version number, the initial value of IDC_VERSION is
  162.     // the word Version(in whatever language) product name VERSION product version.
  163.     //
  164.     char buffer[255];
  165.     char versionName[128];
  166.  
  167.     buffer[0] = '\0';
  168.     versionName[0] = '\0';
  169.  
  170.     versionCtrl->GetText(versionName, sizeof versionName);
  171.     sprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
  172.  
  173.     versionCtrl->SetText(buffer);
  174.   }
  175.  
  176.   // Get the legal copyright string.
  177.   //
  178.   if (applVersion.GetCopyright(copyright))
  179.     copyrightCtrl->SetText(copyright);
  180.  
  181.   // Only get the SpecialBuild text if the VERSIONINFO resource is there.
  182.   //
  183.   if (applVersion.GetDebug(debug))
  184.     debugCtrl->SetText(debug);
  185. }
  186.