プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

MFCで多言語化対応

この記事は2018年12月08日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. MFCで多言語化
  3. おわりに

かんたん Visual C++ [改訂2版] (プログラミングの教科書)

かんたん Visual C++ [改訂2版] (プログラミングの教科書)

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCでダイアログを中央に表示する方法についてです。

目次へ

2. MFCで多言語化

MFCで多言語化にするには、以下の手順で行います。

  1. Visual Studioで、リソースビューを開きます。
  2. リソースの追加で、String Tableを追加します。
  3. 追加したString Tableを選択し、プロパティのLanguageで言語を選択します。
  4. String Tableを開き、IDキャプションを入力します。
    キャプションが多言語化する文言で、IDでプログラムから指定することになります。
  5. プログラムからLoadString関数で文字列を取得します。

書式

int LoadString(
    HINSTANCE hInst,
    UINT uID,
    LPSTR lpBuffer,
    int cchBufferMax
);

引数

hInst
モジュールのインスタンスハンドルを指定します。
アプリケーションの場合、アプリケーションのインスタンスハンドルを指定します。
DLLの場合、DLLのモジュールハンドルを指定します。

uID
String Tableで設定したID

lpBuffer
取得した文字列を格納するバッファ

cchBufferMax
取得した文字列を格納するバッファのサイズ

戻り値

成功した場合、バッファにコピーした文字数(終端のNULL文字は含みません)
指定したIDが存在しない場合、0が返却されます。

実装例

例)ボタンに"はい"を表示します。

String Table
※値は自動で付番されたものを使用します。

ID キャプション
IDS_BN_OK 6000 はい
  • アプリケーションの場合
// 文字列を設定するボタン
CButton m_bnOK;

// インスタンスハンドルを取得します。
HINSTANCE hInst = AfxGetInstanceHandle();

// String Tableに設定された文字列を取得します。
TCHAR res[UCHAR_MAX];
memset(&res[0], 0, sizeof(res));
LoadString(hInst, IDS_BN_OK, (LPTSTR)res, UHCAR_MAX);

// ボタンに文字列を設定します。
m_bnOK.SetWindow(res);
  • DLLの場合
// DLLファイル名
#define DLL_NAME   "Sample.dll"

// 文字列を設定するボタン
CButton m_bnOK;

// DLLのモジュールハンドルを取得します。
HMODULE hModule = GetModuleHandle(DLL_NAME);

// String Tableに設定された文字列を取得します。
TCHAR res[UCHAR_MAX];
memset(&res[0], 0, sizeof(res));
LoadString(hModule, IDS_BN_OK, (LPTSTR)res, UHCAR_MAX);

// ボタンに文字列を設定します。
m_bnOK.SetWindow(res);

目次へ

3. おわりに

IDは一意に指定する必要があります。
またString Tableは画面ごとに作れないため、IDに画面名を付けて一意にしました。
そのためどうしてもIDが長くなりました。
それを嫌ってIDを連番にすることも考えましたが、IDを見ただけではどこで使用する文字列かわからなくなるため、この方法をやめました。

実装してみましたが、やっぱりめんどくさいです。

企業向けプログラミング研修【CodeCamp】

標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION)

標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION)

  • 作者: ハーバートシルト,田中正造,Herbert Schildt,コスモワークス
  • 出版社/メーカー: 翔泳社
  • 発売日: 1999/04/01
  • メディア: 単行本
  • 購入: 11人 クリック: 39回
  • この商品を含むブログ (4件) を見る

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ