MyWinApp::InitInstance()
を呼び出して関数からメイン ダイアログを表示するダイアログ ベースの MFC アプリケーションがあるとしますdlg.DoModal()
。
さらに、このアプリケーションにはローカライズされたリソースが含まれています (すべてプロジェクト内にあり、このテスト ケースのサテライト DLL はありません)。つまり、IDD_TEST_DIALOG
リソースは英語で 1 回、ドイツ語で 1 回の 2 回あります。
ここでやりたいことは、このダイアログにボタンを追加して、表示されるダイアログの言語をリソースで使用可能な言語間で切り替えることです。これは可能ですか?(覚えておいてください: ダイアログは現在、DoModal()
関数を介して表示されます。)
MFC で使用されるリソース言語を変更する場合は、呼び出すSetThreadUILanguage
(WIn7 および XP で動作する) か、SetThreadPreferredUILanguages
Win7 (Vista+) のみを対象とする場合に呼び出すこともできます。実際、ダイアログを再度開くことができれば、言語の変更は非常に簡単です。私にとっての問題は、表示されたウィンドウをさまざまなリソースで何らかの方法でリロードできるかどうかです。
すべての文字列がリロードされることを確認するだけでよいことに注意してください。つまり、何らかの方法でアプリケーション内のすべてのコントロールをウォークスルーしSetWindowText
、ウィンドウのテキストを変更するために呼び出します。
ただし、これは、ローカライズされたダイアログ (リソース) が提供するはずのもの、つまり、翻訳された文字列だけでなく、ダイアログ レイアウトに必要な変更にも反するものです。異なる言語の文字列はおそらく異なる長さになるため、コントロールの間隔を空ける必要があります。違う。(右から左に記述する言語やアイシアン文字をサポートする場合、それに応じてレイアウトを採用する必要があることも想像できます。)