OSの言語とユーザーの言語が異なる場合にダイアログが化ける問題
ダイアログベースのアプリケーションに限らず、 MFC などでも日本語対応のアプリケーションを作ったはずなのにダイアログが 「???」に化けてしまうことが、多言語対応OS でログインユーザーの言語が違う場合に発生することがあります。
これ、実は起動したアプリケーションはユーザー言語ではなくOSの言語をベースにリソースファイルなどを読み込むために起こる現象です。
これを修正するためには
SetThreadLocale(言語ID) で適切な言語IDを指定する必要があるのです…。
が、これ、プロセス単位ではなくスレッド単位で設定するコマンドなので、WinMain の先頭だけではなく
MFC の場合、 AfxBeginThread、SDKの場合 BeginThread や BeginThreadEx で指定したスレッドの起点でも指定してやらないといけないんですね
実は、台湾対応のアプリケーションを作っているはずなのに、ユーザー言語を 台湾に変更しても日本語リソースを読み込んでしまい、文字化けが発生するからおかしいなと思ってたんですが、OSの言語を見てるからなんですね・ω・;
すっかり盲点でした
Comments