1// Windows/ResourceString.cpp 2 3#include "StdAfx.h" 4 5#ifndef _UNICODE 6#include "../Common/StringConvert.h" 7#endif 8 9#include "ResourceString.h" 10 11extern HINSTANCE g_hInstance; 12#ifndef _UNICODE 13extern bool g_IsNT; 14#endif 15 16namespace NWindows { 17 18#ifndef _UNICODE 19 20static CSysString MyLoadStringA(HINSTANCE hInstance, UINT resourceID) 21{ 22 CSysString s; 23 int size = 128; 24 int len; 25 do 26 { 27 size <<= 1; 28 len = ::LoadString(hInstance, resourceID, s.GetBuf((unsigned)size - 1), size); 29 } 30 while (size - len <= 1); 31 s.ReleaseBuf_CalcLen((unsigned)len); 32 return s; 33} 34 35#endif 36 37static const int kStartSize = 256; 38 39static void MyLoadString2(HINSTANCE hInstance, UINT resourceID, UString &s) 40{ 41 int size = kStartSize; 42 int len; 43 do 44 { 45 size <<= 1; 46 len = ::LoadStringW(hInstance, resourceID, s.GetBuf((unsigned)size - 1), size); 47 } 48 while (size - len <= 1); 49 s.ReleaseBuf_CalcLen((unsigned)len); 50} 51 52// NT4 doesn't support LoadStringW(,,, 0) to get pointer to resource string. So we don't use it. 53 54UString MyLoadString(UINT resourceID) 55{ 56 #ifndef _UNICODE 57 if (!g_IsNT) 58 return GetUnicodeString(MyLoadStringA(g_hInstance, resourceID)); 59 else 60 #endif 61 { 62 { 63 wchar_t s[kStartSize]; 64 s[0] = 0; 65 int len = ::LoadStringW(g_hInstance, resourceID, s, kStartSize); 66 if (kStartSize - len > 1) 67 return s; 68 } 69 UString dest; 70 MyLoadString2(g_hInstance, resourceID, dest); 71 return dest; 72 } 73} 74 75void MyLoadString(HINSTANCE hInstance, UINT resourceID, UString &dest) 76{ 77 dest.Empty(); 78 #ifndef _UNICODE 79 if (!g_IsNT) 80 MultiByteToUnicodeString2(dest, MyLoadStringA(hInstance, resourceID)); 81 else 82 #endif 83 { 84 { 85 wchar_t s[kStartSize]; 86 s[0] = 0; 87 int len = ::LoadStringW(hInstance, resourceID, s, kStartSize); 88 if (kStartSize - len > 1) 89 { 90 dest = s; 91 return; 92 } 93 } 94 MyLoadString2(hInstance, resourceID, dest); 95 } 96} 97 98void MyLoadString(UINT resourceID, UString &dest) 99{ 100 MyLoadString(g_hInstance, resourceID, dest); 101} 102 103} 104