おいちゃんのおぼえがき

仕事のTipsをメモするブログ

Aboutダイアログにバージョンリソースの値を表示

2009-11-16 | Win
1.AboutDialog にラベルを置く。ラベルはスタティックテキストでよいが、IDを適当なものに変えておく
2.AboutDialog のOnInitDialog()に下記のコードを追加しておく
BOOL CAboutDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  // TODO:  ここに初期化を追加してください
  CStatic *lbl = (CStatic *)GetDlgItem(IDC_VERSION);
  lbl->SetWindowText(GetFileVersion());

  return TRUE;  // return TRUE unless you set the focus to a control
  // 例外 : OCX プロパティ ページは必ず FALSE を返します。
}

3.適当なところに下記のバージョン取得の関数を追加する
// バージョンリソースからファイルバージョン値を取得
#pragma comment(lib, "version.lib")
CString GetFileVersion(void)
{
  CString	ret;
  DWORD	size, dw;
  TCHAR	path[_MAX_PATH + 1];
  LPVOID	lp, lpbuf;
  UINT	usize;
  VS_FIXEDFILEINFO* info;
  WORD	ver[4];

  ret.Empty();
  if (::GetModuleFileName(NULL, path, _MAX_PATH) != 0) {
    if ((size = ::GetFileVersionInfoSize(path, &dw)) > 0) {
      if ((lp = ::GlobalAlloc(GMEM_FIXED, size)) != NULL) {
        ::GetFileVersionInfo(path, 0, size, lp);
        ::VerQueryValue(lp, _T(""), &lpbuf, &usize);
        info = (VS_FIXEDFILEINFO*)lpbuf;
        ver[3] = HIWORD(info->dwFileVersionMS);
        ver[2] = LOWORD(info->dwFileVersionMS);
        ver[1] = HIWORD(info->dwFileVersionLS);
        ver[0] = LOWORD(info->dwFileVersionLS);
        ret.Format(_T("%d.%d.%d.%d"), ver[3], ver[2], ver[1], ver[0]);
        GlobalFree(lp);
      }
    }
  }
  return ret;
}
注)コードには整形のために2バイトスペースを使っているので、そのままコピペではエラーになるかも。
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« MFC オーナー描画 | トップ | 入力ポートのプルアップ »

Win」カテゴリの最新記事