|
分類:[C/C++]
[環境]
Visual Studio 2008 Professional Edition C++ MFC使用 Win32/64 Debugビルド
Windows7 Professional(64bit)
いつもお世話になっております。
VisualC++のリソースエディタで英語 (米国) リソース文字列を作成し、
下記のコードで英語文字列を取得できませんでした。(日本語文字列が返ってきます)
正しい取得方法を教えていただけませんでしょうか。
CString::LoadString()と::FindResourceEx()を使う方法を試してみましたが、
どちらもうまくいきませんでした。(日本語文字列が返ってきます)
----------------------------------------------------------------------
void CTest1Dlg::OnBnClickedButtonEnglish()
{
if (TRUE) {
// ::FindResourceEx()で取得
CString str;
if (getStringFromRes(IDS_ABOUTBOX, TRUE, str)) {
MessageBox(str);
}
else {
MessageBox(_T("error"));
}
}
else {
// CString::LoadString()で取得
::SetThreadLocale(0x0409); // 英語
CString str;
str.LoadString(IDS_ABOUTBOX);
MessageBox(str);
}
}
BOOL getStringFromRes(UINT nStringID, BOOL isLangEnglish, CString& strBuffer)
{
HINSTANCE hModule = ::AfxGetResourceHandle();
WORD wLangId;
if (isLangEnglish) {
wLangId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
}
else {
wLangId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
}
HRSRC hResource = ::FindResourceEx(hModule, RT_STRING,
MAKEINTRESOURCE(nStringID / 16 + 1),
wLangId);
if(hResource == NULL) {
return FALSE;
}
DWORD dwSize = ::SizeofResource(hModule, hResource);
if (dwSize < 1) {
return FALSE;
}
strBuffer = _T("");
int nLen = ::LoadString(hModule, nStringID,
strBuffer.GetBuffer(dwSize), dwSize);
strBuffer.ReleaseBuffer();
if (nLen <= 0) {
return FALSE;
}
return TRUE;
}
----------------------------------------------------------------------
|