home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
MEC2SUF.LZH
/
MC2SFABD.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-09
|
5KB
|
166 lines
/* Project mec2suf
Project Team DoGA
Copyright (c) 1996. All Rights Reserved.
サブシステム: mec2suf.exe Application
ファイル: mc2sfabd.cpp
作成者: Masamichi Takatsu
概要
====
mec2sufAboutDlg (TDialog) のインプリメンテーション用のソースファイル
*/
#include <owl\owlpch.h>
#pragma hdrstop
#include <owl\static.h>
#if !defined(__FLAT__)
#include <ver.h>
#endif
#include "mc2sfapp.h"
#include "mc2sfabd.h"
ProjectRCVersion::ProjectRCVersion (TModule *module)
{
char appFName[255];
char subBlockName[255];
DWORD fvHandle;
UINT vSize;
FVData = 0;
module->GetModuleFileName(appFName, sizeof(appFName));
DWORD dwSize = GetFileVersionInfoSize(appFName, &fvHandle);
if (dwSize) {
FVData = (void FAR *)new char[(UINT)dwSize];
if (GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) {
// 文字列をバッファにコピーする事により,Win16 環境で -dc コンパイラスイッチ(定数文字列をコード
// セグメントに入れるというもの)を指定した場合でも,VerQueryValue がうまく動作するようにする。
// これは,Microsoft の ver.dll が subBlockName で示される文字列に書き込みをしてしまうという
// 事に対処するためのものである
lstrcpy(subBlockName, "\\VarFileInfo\\Translation");
if (!VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&TransBlock, &vSize)) {
delete FVData;
FVData = 0;
} else
// 上下ワードをスワップして,wsprintf が lang-charset を正しい書式で出力するようにする
*(DWORD *)TransBlock = MAKELONG(HIWORD(*(DWORD *)TransBlock), LOWORD(*(DWORD *)TransBlock));
}
}
}
ProjectRCVersion::~ProjectRCVersion ()
{
if (FVData)
delete FVData;
}
BOOL ProjectRCVersion::GetProductName (LPSTR &prodName)
{
UINT vSize;
char subBlockName[255];
wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductName");
return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodName, &vSize) : FALSE;
}
BOOL ProjectRCVersion::GetProductVersion (LPSTR &prodVersion)
{
UINT vSize;
char subBlockName[255];
wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"ProductVersion");
return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&prodVersion, &vSize) : FALSE;
}
BOOL ProjectRCVersion::GetCopyright (LPSTR ©right)
{
UINT vSize;
char subBlockName[255];
wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"LegalCopyright");
return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)©right, &vSize) : FALSE;
}
BOOL ProjectRCVersion::GetDebug (LPSTR &debug)
{
UINT vSize;
char subBlockName[255];
wsprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(DWORD *)TransBlock, (LPSTR)"SpecialBuild");
return FVData ? VerQueryValue(FVData, subBlockName, (void FAR* FAR*)&debug, &vSize) : FALSE;
}
//{{mec2sufAboutDlg Implementation}}
//////////////////////////////////////////////////////////
// mec2sufAboutDlg
// ==========
// 構築時 / 破壊時の処理
mec2sufAboutDlg::mec2sufAboutDlg (TWindow *parent, TResId resId, TModule *module)
: TDialog(parent, resId, module)
{
// INSERT>> コンストラクタ用のコードはここに
}
mec2sufAboutDlg::~mec2sufAboutDlg ()
{
Destroy();
// INSERT>> デストラクタ用のコードはここに
}
void mec2sufAboutDlg::SetupWindow ()
{
LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0;
// VERSIONINFO に基づいた値から,スタティックコントロールのテキストを取得する
TStatic *versionCtrl = new TStatic(this, IDC_VERSION, 255);
TStatic *copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
TStatic *debugCtrl = new TStatic(this, IDC_DEBUG, 255);
TDialog::SetupWindow();
// VERSIONINFO の処理をする
ProjectRCVersion applVersion(GetModule());
// 製品名・製品のバージョン文字列を取得する
if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) {
// IDC_VERSION は製品名とバージョン番号であり,IDC_VERSION の初期値は
// Version という単語(どの言語においても),製品名,VERSION,製品バージョンである
char buffer[255];
char versionName[128];
buffer[0] = '\0';
versionName[0] = '\0';
versionCtrl->GetText(versionName, sizeof(versionName));
wsprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
versionCtrl->SetText(buffer);
}
//法的なコピーライト文字列を取得する
if (applVersion.GetCopyright(copyright))
copyrightCtrl->SetText(copyright);
// もし VERSIONINFO リソースが存在するなら,SpecialBuild テキストだけを取得する
if (applVersion.GetDebug(debug))
debugCtrl->SetText(debug);
}