// Windows/ResourceString.cpp | |
#include "StdAfx.h" | |
#ifndef _UNICODE | |
#include "../Common/StringConvert.h" | |
#endif | |
#include "ResourceString.h" | |
extern HINSTANCE g_hInstance; | |
#ifndef _UNICODE | |
extern bool g_IsNT; | |
#endif | |
namespace NWindows { | |
#ifndef _UNICODE | |
static CSysString MyLoadStringA(HINSTANCE hInstance, UINT resourceID) | |
{ | |
CSysString s; | |
int size = 128; | |
int len; | |
do | |
{ | |
size <<= 1; | |
len = ::LoadString(hInstance, resourceID, s.GetBuffer(size - 1), size); | |
} | |
while (size - len <= 1); | |
s.ReleaseBuffer(); | |
return s; | |
} | |
#endif | |
static const int kStartSize = 256; | |
static void MyLoadString2(HINSTANCE hInstance, UINT resourceID, UString &s) | |
{ | |
int size = kStartSize; | |
int len; | |
do | |
{ | |
size <<= 1; | |
len = ::LoadStringW(hInstance, resourceID, s.GetBuffer(size - 1), size); | |
} | |
while (size - len <= 1); | |
s.ReleaseBuffer(); | |
} | |
// NT4 doesn't support LoadStringW(,,, 0) to get pointer to resource string. So we don't use it. | |
UString MyLoadString(UINT resourceID) | |
{ | |
#ifndef _UNICODE | |
if (!g_IsNT) | |
return GetUnicodeString(MyLoadStringA(g_hInstance, resourceID)); | |
else | |
#endif | |
{ | |
{ | |
wchar_t s[kStartSize]; | |
s[0] = 0; | |
int len = ::LoadStringW(g_hInstance, resourceID, s, kStartSize); | |
if (kStartSize - len > 1) | |
return s; | |
} | |
UString dest; | |
MyLoadString2(g_hInstance, resourceID, dest); | |
return dest; | |
} | |
} | |
void MyLoadString(HINSTANCE hInstance, UINT resourceID, UString &dest) | |
{ | |
dest.Empty(); | |
#ifndef _UNICODE | |
if (!g_IsNT) | |
MultiByteToUnicodeString2(dest, MyLoadStringA(hInstance, resourceID)); | |
else | |
#endif | |
{ | |
{ | |
wchar_t s[kStartSize]; | |
s[0] = 0; | |
int len = ::LoadStringW(hInstance, resourceID, s, kStartSize); | |
if (kStartSize - len > 1) | |
{ | |
dest = s; | |
return; | |
} | |
} | |
MyLoadString2(hInstance, resourceID, dest); | |
} | |
} | |
void MyLoadString(UINT resourceID, UString &dest) | |
{ | |
MyLoadString(g_hInstance, resourceID, dest); | |
} | |
} |