全角和半角的转化可以在输入时就指定输入法(方法一),也可以采用对照表(方法二)(可以改进),也可以采用函数直接转化(方法三)(最简单).这三种方法都来自网上,经测试,方法二和方法三都可以解决问题,而且方法二和三都很好封装成一个通用函数,推荐.
方法一:
HWND hWnd= GetDlgItem(IDC_EDT_NUMBER)->m_hWnd;
HIMC hImc;
DWORD dwConvMode, dwSentMode;
hImc = ImmGetContext(hWnd);
ImmGetConversionStatus(hImc, &dwConvMode, &dwSentMode);
ImmSetConversionStatus(hImc, dwConvMode&~IME_CMODE_FULLSHAPE, dwSentMode);
方法二:
void Str2GBReplace(CString &mString)
{
// mString.Replace(_T(" "), _T(" "));
// mString.Replace(_T("!"), _T("!"));
// mString.Replace(_T(""""), """);
// mString.Replace(_T("#"), "#");
// mString.Replace(_T("$"), "$");
// mString.Replace(_T("%"), "%");
// mString.Replace(_T("&"), "&");
// mString.Replace(_T("'"), "'");
// mString.Replace(_T("("), "(");
// mString.Replace(_T(")"), ")");
// mString.Replace(_T("*"), "*");
// mString.Replace(_T("+"), "+");
// mString.Replace(_T(","), ",");
// mString.Replace(_T("-"), "-");
// mString.Replace(_T("."), "。");
// mString.Replace(_T("/"), "/");
// mString.Replace(_T("0"), "0");
// mString.Replace(_T("1"), "1");
// mString.Replace(_T("2"), "2");
// mString.Replace(_T("3"), "3");
// mString.Replace(_T("4"), "4");
// mString.Replace(_T("5"), "5");
// mString.Replace(_T("6"), "6");
// mString.Replace(_T("7"), "7");
// mString.Replace(_T("8"), "8");
// mString.Replace(_T("9"), "9");
// mString.Replace(_T(":"), ":");
// mString.Replace(_T(";"), ";");
// mString.Replace(_T("<"), "<");
// mString.Replace(_T("="), "=");
// mString.Replace(_T(">"), ">");
// mString.Replace(_T("?"), "?");
// mString.Replace(_T("@"), "@");
// mString.Replace(_T("A"), "A");
// mString.Replace(_T("B"), "B");
// mString.Replace(_T("C"), "C");
// mString.Replace(_T("D"), "D");
// mString.Replace(_T("E"), "E");
// mString.Replace(_T("F"), "F");
// mString.Replace(_T("G"), "G");
// mString.Replace(_T("H"), "H");
// mString.Replace(_T("I"), "I");
// mString.Replace(_T("J"), "J");
// mString.Replace(_T("K"), "K");
// mString.Replace(_T("L"), "L");
// mString.Replace(_T("M"), "M");
// mString.Replace(_T("N"), "N");
// mString.Replace(_T("O"), "O");
// mString.Replace(_T("P"), "P");
// mString.Replace(_T("Q"), "Q");
// mString.Replace(_T("R"), "R");
// mString.Replace(_T("S"), "S");
// mString.Replace(_T("T"), "T");
// mString.Replace(_T("U"), "U");
// mString.Replace(_T("V"), "V");
// mString.Replace(_T("W"), "W");
// mString.Replace(_T("X"), "X");
// mString.Replace(_T("Y"), "Y");
// mString.Replace(_T("Z"), "Z");
// mString.Replace(_T("["), "[");
// mString.Replace(_T("//"), "\");
// mString.Replace(_T("]"), "]");
// mString.Replace(_T("^"), "^");
// mString.Replace(_T("_"), "_");
// mString.Replace(_T("`"), "`");
// mString.Replace("a", "a");
// mString.Replace("b", "b");
// mString.Replace("c", "c");
// mString.Replace("d", "d");
// mString.Replace("e", "e");
// mString.Replace("f", "f");
// mString.Replace("g", "g");
// mString.Replace("h", "h");
// mString.Replace("i", "i");
// mString.Replace("j", "j");
// mString.Replace("k", "k");
// mString.Replace("l", "l");
// mString.Replace("m", "m");
// mString.Replace("n", "n");
// mString.Replace("o", "o");
// mString.Replace("p", "p");
// mString.Replace("q", "q");
// mString.Replace("r", "r");
// mString.Replace("s", "s");
// mString.Replace("t", "t");
// mString.Replace("u", "u");
// mString.Replace("v", "v");
// mString.Replace("w", "w");
// mString.Replace("x", "x");
// mString.Replace("y", "y");
// mString.Replace("z", "z");
// mString.Replace("{", "{");
// mString.Replace("|", "|");
// mString.Replace("}", "}");
// mString.Replace("~", "~");
}
// 将全角字符串转化为半角字符串
void GB2StrReplace(CString &mString)
{
mString.Replace(_T("!"), _T("!"));
// mString.Replace(_T("""), _T(""""));
mString.Replace(_T("#"), _T("#"));
mString.Replace(_T("$"), _T("$"));
mString.Replace(_T("%"), _T("%"));
mString.Replace(_T("&"), _T("&"));
mString.Replace(_T("'"), _T( "'"));
mString.Replace(_T("("), _T("("));
mString.Replace(_T(")"), _T(")"));
mString.Replace(_T("*"), _T("*"));
mString.Replace(_T("+"), _T("+"));
mString.Replace(_T(","), _T(","));
mString.Replace(_T("-"), _T("-"));
mString.Replace(_T("。"), _T("."));
mString.Replace(_T("/"), _T("//"));
mString.Replace(_T("0"), _T("0"));
mString.Replace(_T("1"), _T("1"));
mString.Replace(_T("2"), _T("2"));
mString.Replace(_T("3"), _T("3"));
mString.Replace(_T("4"), _T("4"));
mString.Replace(_T("5"), _T("5"));
mString.Replace(_T("6"), _T("6"));
mString.Replace(_T("7"), _T("7"));
mString.Replace(_T("8"), _T("8"));
mString.Replace(_T("9"), _T("9"));
mString.Replace(_T(":"), _T(":"));
mString.Replace(_T(";"), _T(";"));
mString.Replace(_T("<"), _T("<"));
mString.Replace(_T("="), _T("="));
mString.Replace(_T(">"), _T(">"));
mString.Replace(_T("?"), _T("?"));
mString.Replace(_T("@"), _T("@"));
mString.Replace(_T("A"), _T("A"));
mString.Replace(_T("B"), _T("B"));
mString.Replace(_T("B"), _T("B"));
mString.Replace(_T("C"), _T("C"));
mString.Replace(_T("D"), _T("D"));
mString.Replace(_T("E"), _T("E"));
mString.Replace(_T("F"), _T("F"));
mString.Replace(_T("G"), _T("G"));
mString.Replace(_T("H"), _T("H"));
mString.Replace(_T("I"), _T("I"));
mString.Replace(_T("J"), _T("J"));
mString.Replace(_T("K"), _T( "K"));
mString.Replace(_T("L"), _T("L"));
mString.Replace(_T("M"), _T("M"));
mString.Replace(_T("N"), _T("N"));
mString.Replace(_T("O"), _T("O"));
mString.Replace(_T("P"), _T("P"));
mString.Replace(_T("Q"), _T("Q"));
mString.Replace(_T("R"), _T("R"));
mString.Replace(_T("S"), _T("S"));
mString.Replace(_T("T"), _T("T"));
mString.Replace(_T("U"), _T("U"));
mString.Replace(_T("V"), _T("V"));
mString.Replace(_T("W"), _T("W"));
mString.Replace(_T("X"), _T("X"));
mString.Replace(_T("Y"), _T("Y"));
mString.Replace(_T("Z"), _T("Z"));
mString.Replace(_T("["), _T("["));
mString.Replace(_T("\"), _T("//"));
mString.Replace(_T("]"), _T("]"));
mString.Replace(_T("^"), _T("^"));
mString.Replace(_T("_"), _T("_"));
mString.Replace(_T("`"), _T("`"));
mString.Replace(_T("a"), _T("a"));
mString.Replace(_T("b"), _T("b"));
mString.Replace(_T("c"), _T("c"));
mString.Replace(_T("d"), _T("d"));
mString.Replace(_T("e"), _T("e"));
mString.Replace(_T("f"), _T("f"));
mString.Replace(_T("g"), _T("g"));
mString.Replace(_T("h"), _T("h"));
mString.Replace(_T("i"), _T("i"));
mString.Replace(_T("j"), _T("j"));
mString.Replace(_T("k"), _T("k"));
mString.Replace(_T("l"), _T("l"));
mString.Replace(_T("m"), _T("m"));
mString.Replace(_T("n"), _T("n"));
mString.Replace(_T("o"), _T("o"));
mString.Replace(_T("p"), _T("p"));
mString.Replace(_T("q"), _T("q"));
mString.Replace(_T("r"), _T("r"));
mString.Replace(_T("s"), _T("s"));
mString.Replace(_T("t"), _T("t"));
mString.Replace(_T("u"), _T("u"));
mString.Replace(_T("v"), _T("v"));
mString.Replace(_T("w"), _T("w"));
mString.Replace(_T("x"), _T("x"));
mString.Replace(_T("y"), _T("y"));
mString.Replace(_T("z"), _T("z"));
mString.Replace(_T("{"), _T("{"));
mString.Replace(_T("|"), _T("|"));
mString.Replace(_T("}"), _T("}"));
mString.Replace(_T("~"), _T("~"));
}
方法三:
AnsiString text = "変換する文字列";
//変換方法
DWORD flags = LCMAP_FULLWIDTH; //全角文字にします(適用される場合)。
//DWORD flags = LCMAP_HALFWIDTH; //半角文字にします(適用される場合)。
//DWORD flags = LCMAP_HIRAGANA; //ひらがなにします。
//DWORD flags = LCMAP_KATAKANA; //カタカナにします。
const int size = text.Length() * 2 + 1;
char* s = new char[size];
try
{
ZeroMemory(s, size);
LCMapString(GetUserDefaultLCID(),
flags,
text.c_str(),
text.Length() + 1,
s,
size);
AnsiString newtext = s; //変換した文字列
return newtext;
}
__finally
{
delete[] s;
}