home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / TCH2AVI.LZH / TCH2VABD.CPP < prev    next >
C/C++ Source or Header  |  1996-05-10  |  5KB  |  166 lines

  1. /*  Project tch2avi
  2.     Project Team DoGA
  3.     Copyright (c) 1996. All Rights Reserved.
  4.  
  5.     サブシステム:    tch2avi.exe Application
  6.     ファイル:        tch2vabd.cpp
  7.     作成者:          Masamichi Takatsu
  8.  
  9.  
  10.     概要
  11.     ====
  12.     tch2aviAboutDlg (TDialog) のインプリメンテーション用のソースファイル
  13. */
  14.  
  15.  
  16. #include <owl\owlpch.h>
  17. #pragma hdrstop
  18.  
  19. #include <owl\static.h>
  20.  
  21. #if !defined(__FLAT__)
  22. #include <ver.h>
  23. #endif
  24.  
  25. #include "tch2vapp.h"
  26. #include "tch2vabd.h"
  27.  
  28.  
  29. ProjectRCVersion::ProjectRCVersion (TModule *module)
  30. {
  31.     char    appFName[255];
  32.     char    subBlockName[255];
  33.     DWORD   fvHandle;
  34.     UINT    vSize;
  35.  
  36.     FVData = 0;
  37.  
  38.     module->GetModuleFileName(appFName, sizeof(appFName));
  39.     DWORD dwSize = GetFileVersionInfoSize(appFName, &fvHandle);
  40.     if (dwSize) {
  41.         FVData  = (void FAR *)new char[(UINT)dwSize];
  42.         if (GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) {
  43.             // 文字列をバッファにコピーする事により,Win16 環境で -dc コンパイラスイッチ(定数文字列をコード
  44.             // セグメントに入れるというもの)を指定した場合でも,VerQueryValue がうまく動作するようにする。
  45.             // これは,Microsoft の ver.dll が subBlockName で示される文字列に書き込みをしてしまうという
  46.             // 事に対処するためのものである
  47.             lstrcpy(subBlockName, "\\VarFileInfo\\Translation"); 
  48.             if (!VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&TransBlock, &vSize)) {
  49.                 delete FVData;
  50.                 FVData = 0;
  51.             } else
  52.                 // 上下ワードをスワップして,wsprintf が lang-charset を正しい書式で出力するようにする
  53.                 *(DWORD *)TransBlock = MAKELONG(HIWORD(*(DWORD *)TransBlock), LOWORD(*(DWORD *)TransBlock));
  54.         }
  55.     }
  56. }
  57.  
  58.  
  59. ProjectRCVersion::~ProjectRCVersion ()
  60. {
  61.     if (FVData)
  62.         delete FVData;
  63. }
  64.  
  65.  
  66. BOOL ProjectRCVersion::GetProductName (LPSTR &prodName)
  67. {
  68.     UINT    vSize;
  69.     char    subBlockName[255];
  70.  
  71.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductName");
  72.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodName, &vSize) : FALSE;
  73. }
  74.  
  75.  
  76. BOOL ProjectRCVersion::GetProductVersion (LPSTR &prodVersion)
  77. {
  78.     UINT    vSize;
  79.     char    subBlockName[255];
  80.  
  81.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductVersion");
  82.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodVersion, &vSize) : FALSE;
  83. }
  84.  
  85.  
  86. BOOL ProjectRCVersion::GetCopyright (LPSTR ©right)
  87. {
  88.     UINT    vSize;
  89.     char    subBlockName[255];
  90.  
  91.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"LegalCopyright");
  92.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)©right, &vSize) : FALSE;
  93. }
  94.  
  95.  
  96. BOOL ProjectRCVersion::GetDebug (LPSTR &debug)
  97. {
  98.     UINT    vSize;
  99.     char    subBlockName[255];
  100.  
  101.     wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"SpecialBuild");
  102.     return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&debug, &vSize) : FALSE;
  103. }
  104.  
  105.  
  106. //{{tch2aviAboutDlg Implementation}}
  107.  
  108.  
  109. //////////////////////////////////////////////////////////
  110. // tch2aviAboutDlg
  111. // ==========
  112. // 構築時 / 破壊時の処理
  113. tch2aviAboutDlg::tch2aviAboutDlg (TWindow *parent, TResId resId, TModule *module)
  114.     : TDialog(parent, resId, module)
  115. {
  116.     // INSERT>> コンストラクタ用のコードはここに
  117. }
  118.  
  119.  
  120. tch2aviAboutDlg::~tch2aviAboutDlg ()
  121. {
  122.     Destroy();
  123.  
  124.     // INSERT>> デストラクタ用のコードはここに
  125. }
  126.  
  127.  
  128. void tch2aviAboutDlg::SetupWindow ()
  129. {
  130.     LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0;
  131.  
  132.     // VERSIONINFO に基づいた値から,スタティックコントロールのテキストを取得する
  133.     TStatic *versionCtrl = new TStatic(this, IDC_VERSION, 255);
  134.     TStatic *copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
  135.     TStatic *debugCtrl = new TStatic(this, IDC_DEBUG, 255);
  136.  
  137.     TDialog::SetupWindow();
  138.  
  139.     // VERSIONINFO の処理をする
  140.     ProjectRCVersion applVersion(GetModule());
  141.  
  142.     // 製品名・製品のバージョン文字列を取得する
  143.     if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) {
  144.     // IDC_VERSION は製品名とバージョン番号であり,IDC_VERSION の初期値は
  145.     // Version という単語(どの言語においても),製品名,VERSION,製品バージョンである
  146.         char    buffer[255];
  147.         char    versionName[128];
  148.  
  149.         buffer[0] = '\0';
  150.         versionName[0] = '\0';
  151.  
  152.         versionCtrl->GetText(versionName, sizeof(versionName));
  153.         wsprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
  154.  
  155.         versionCtrl->SetText(buffer);
  156.     }
  157.  
  158.     //法的なコピーライト文字列を取得する
  159.     if (applVersion.GetCopyright(copyright))
  160.         copyrightCtrl->SetText(copyright);
  161.  
  162.     // もし VERSIONINFO リソースが存在するなら,SpecialBuild テキストだけを取得する
  163.     if (applVersion.GetDebug(debug))
  164.         debugCtrl->SetText(debug);
  165. }
  166.