void GBK2GB(char *szBuf) { int nStrLen = (int)strlen(szBuf); if( nStrLen == 0 ) return; WORD wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5); int nReturn = LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nStrLen, NULL, 0); if(!nReturn) return; char *pcBuf = new char[nReturn + 1]; wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5); LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nReturn, pcBuf, nReturn + 1); strncpy(szBuf, pcBuf, nReturn); delete [] pcBuf; }
tchar_t* TcsToUpper(tchar_t* Out,size_t OutLen,const tchar_t* In) { if (LCMapString(LOCALE_USER_DEFAULT,LCMAP_UPPERCASE,In,-1,Out,OutLen)) return Out; // fallback if (OutLen) { for (;*In && OutLen>1;++In,++Out,--OutLen) *Out = (tchar_t)toupper(*In); *Out = 0; } return Out; }
int _RTLENTRYF _EXPFUNC _ltolower( int ch ) { LPWIN32LOCALE locale = __locale; // for future use. int result = 0; // Initialize it to zero since the LCMapString might only // write one char into these four bytes. /* check for EOF */ if( ch == EOF ) return( EOF ); if (locale->isCLocale) return _lower[ ch & 0x00ff]; LCMapString(locale->handle, LCMAP_LOWERCASE, (LPCSTR) &ch, 1, (LPTSTR)&result, sizeof(result)); return result; }
tchar_t* TcsToUpper(tchar_t* Out,size_t OutLen,const tchar_t* In) { #ifndef WINDOWS_DESKTOP if (LCMapStringEx(LOCALE_NAME_USER_DEFAULT, LCMAP_UPPERCASE, In, -1, Out, OutLen, NULL, NULL, 0)) #else if (LCMapString(LOCALE_USER_DEFAULT,LCMAP_UPPERCASE,In,-1,Out,OutLen)) #endif return Out; // fallback if (OutLen) { for (;*In && OutLen>1;++In,++Out,--OutLen) *Out = (tchar_t)toupper(*In); *Out = 0; } return Out; }
void ToSentenceCase(std::wstring& str) { if (!str.empty()) { ToLowerCase(str); bool isCapped = false; for (size_t i = 0; i < str.length(); ++i) { if (IsEOSPunct(str[i])) isCapped = false; if (!isCapped && iswalpha(str[i]) != 0) { WCHAR* srcAndDest = &str[i]; LCMapString(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, srcAndDest, 1, srcAndDest, 1); isCapped = true; } } } }
LRESULT CALLBACK EditCtlProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { LPCTSTR lpTable, lpTable1; TCHAR c; #ifdef FAREAST TCHAR ch, chHW; #endif // FAREAST HKL hkl = GetKeyboardLayout(0); ASSERT(oldEditCtlProc); switch (message) { case WM_PASTE : { BOOL bPassThrough = TRUE; if (IsNumericOnlyEdit(hwnd)) { // only going to accept pastes that have pure numeric data in them HANDLE hMem; if(OpenClipboard(hwnd)) { hMem = GetClipboardData(CF_UNICODETEXT); if(hMem) { TCHAR *pText = (TCHAR *)LocalLock(hMem); // can't fail on CE int iLen = _tcslen(pText); int iPos = 0; for (iPos = 0; (iPos < iLen) && bPassThrough; iPos++) { if (!_istdigit(pText[iPos])) { // bad char bPassThrough = FALSE; } } LocalUnlock(hMem); } CloseClipboard(); } } if (bPassThrough) { return CallWindowProc(oldEditCtlProc,hwnd, message, wParam, lParam); } else { MessageBeep(MB_OK); return FALSE; } } break; case WM_IME_COMPOSITION: if( ImmIsIME(hkl ) && LOWORD(hkl ) == MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT)) { HIMC himc = ImmGetContext(hwnd); if (himc) { TCHAR szTempStr[4]; if (0<ImmGetCompositionString(himc,GCS_COMPSTR, szTempStr, 4)) { DWORD fdwConversion; DWORD fdwSentence; ImmNotifyIME(himc,NI_COMPOSITIONSTR,CPS_CANCEL,0); ImmGetConversionStatus(himc, &fdwConversion, &fdwSentence); fdwConversion&=(~IME_CMODE_NATIVE); ImmSetConversionStatus(himc,fdwConversion, fdwSentence); } ImmReleaseContext(hwnd,himc); return CallWindowProc(oldEditCtlProc,hwnd, message, wParam, lParam); } } break; case WM_CHAR: #ifdef FAREAST // Convert full-width numbers to half width ch = (TCHAR)wParam; LCMapString(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH, &ch, 1, &chHW, 1); wParam = (WPARAM)chHW; #endif // FAREAST // This character is not ASCII. If your country/region needs specific characters. You // have to change this. Otherwise, we abandon this character. if (wParam >= 0x80 ) { // service on ilegal chars MessageBeep(MB_OK); return TRUE; } if (wParam < VK_SPACE || wParam > 0x7e ) { // service on legal chars //DPF("None ascii char. ignore \r\n "); break; } if ((lpTable = GetTable(hwnd)) == NULL) { // DPF("Can not find table, trying parent \r\n"); if ((lpTable = GetTable(GetParent(hwnd))) == NULL) { //DPF("Can not find table, \r\n"); break; } } lpTable1 = lpTable; if (wParam >= '0' && wParam <= '9') goto found; while ((c = *lpTable++) > 0) { if ((TCHAR)wParam == c) goto found; } // now try w/ upper case if (iswlower((TCHAR)wParam)) { wParam = (LPARAM)towupper((TCHAR)wParam); while ((c = *lpTable1++) > 0) { if ((TCHAR)wParam == c) goto found; } } //DPF1("Char '%c' not in table\r\n", wParam); MessageBeep(MB_OK); return TRUE; found: //DPF1("Found char '%c' in table\r\n", wParam); break; default: break; } // of switch return CallWindowProc(oldEditCtlProc, hwnd, message, wParam, lParam); }
void ToProperCase(std::wstring& str) { WCHAR* srcAndDest = &str[0]; int strAndDestLen = (int)str.length(); LCMapString(LOCALE_USER_DEFAULT, LCMAP_TITLECASE, srcAndDest, strAndDestLen, srcAndDest, strAndDestLen); }
BOOL CheckWildcardMatchInternal(const TCHAR *szWildcard, const TCHAR *szString, BOOL bCaseSensitive) { BOOL bMatched; BOOL bCurrentMatch = TRUE; while(*szWildcard != '\0' && *szString != '\0' && bCurrentMatch) { switch(*szWildcard) { /* Match against the next part of the wildcard string. If there is a match, then return true, else consume the next character, and check again. */ case '*': bMatched = FALSE; if(*(szWildcard + 1) != '\0') { bMatched = CheckWildcardMatch(++szWildcard, szString, bCaseSensitive); } while(*szWildcard != '\0' && *szString != '\0' && !bMatched) { /* Consume one more character on the input string, and keep (recursively) trying to match. */ bMatched = CheckWildcardMatch(szWildcard, ++szString, bCaseSensitive); } if(bMatched) { while(*szWildcard != '\0') szWildcard++; szWildcard--; while(*szString != '\0') szString++; } bCurrentMatch = bMatched; break; case '?': szString++; break; default: if(bCaseSensitive) { bCurrentMatch = (*szWildcard == *szString); } else { TCHAR szCharacter1[1]; LCMapString(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, szWildcard, 1, szCharacter1, SIZEOF_ARRAY(szCharacter1)); TCHAR szCharacter2[1]; LCMapString(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, szString, 1, szCharacter2, SIZEOF_ARRAY(szCharacter2)); bCurrentMatch = (szCharacter1[0] == szCharacter2[0]); } szString++; break; } szWildcard++; } /* Skip past any trailing wildcards. */ while(*szWildcard == '*') szWildcard++; if(*szWildcard == '\0' && *szString == '\0' && bCurrentMatch) return TRUE; return FALSE; }