詳しくは調べていない。W系の関数ならLCIDは無視すると思いたいが、マニュアルにはそう書いてないように見える。CStringはstd::wstringでも動くはず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <AFX.h> #include "LCMapCommon.h" static CString LCMapCommon(LPCWSTR p, DWORD flag) { size_t len = lstrlenW(p); size_t outlen = (len+1)*2; WCHAR* q = (WCHAR*)malloc(outlen*sizeof(WCHAR)); struct Qfree { WCHAR* q_; Qfree(WCHAR* q) {q_=q;} ~Qfree(){free(q_);} } qfree(q); int resultlen=LCMapStringW( LOCALE_SYSTEM_DEFAULT, flag, p, len, q, outlen); if(resultlen==0) { return L""; } q[resultlen]=0; return CString(q,resultlen); } CString Han2Zen(LPCWSTR p) { return LCMapCommon(p, LCMAP_FULLWIDTH); } CString Zen2Han(LPCWSTR p) { return LCMapCommon(p, LCMAP_HALFWIDTH); } CString Kata2Hira(LPCWSTR p) { return LCMapCommon(p, LCMAP_HIRAGANA); } CString Hira2Kata(LPCWSTR p) { return LCMapCommon(p, LCMAP_KATAKANA); } |