Source code

Revision control

Copy as Markdown

Other Tools

// 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.GetBuf(size - 1), size);↩
}↩
while (size - len <= 1);↩
s.ReleaseBuf_CalcLen(len);↩
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.GetBuf(size - 1), size);↩
}↩
while (size - len <= 1);↩
s.ReleaseBuf_CalcLen(len);↩
}↩
// 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);↩
}↩
}↩