UNICODEの全角/半角/カタカナ/ひらがな/漢字を判定するにはGetStringTypeEx()

以下コピペ

 文字の種類を判別する方法。 GetStringTypeEx APIを使用する。

// 引数dataはUnicode文字列
void CXxxxx::xxxx(const wchar_t *data)
{
    // 文字列の文字数
    int length = wcslen(data);

    // 文字情報の配列
    WORD *type = new WORD[length];

    // 文字情報を取得
    if (GetStringTypeEx(0, CT_CTYPE3, data, length, type))
    {
        // 取得成功

        for (int i = 0; i < length; i++)
        {
            // 1文字毎に判定
            if ((type[i] & C3_HALFWIDTH) == C3_HALFWIDTH)
            {
                // 半角英数、半角カタカナ、半角スペース
                //
                //
                //
            }

            if ((type[i] & C3_FULLWIDTH) == C3_FULLWIDTH)
            {
                // 全角英数、全角カタカナ、全角スペース
                //
                //
                //
            }

            if ((type[i] & C3_IDEOGRAPH) == C3_IDEOGRAPH)
            {
                // 全角漢字
                //
                //
                //
            }

            if ((type[i] & C3_KATAKANA) == C3_KATAKANA)
            {
                // 半角カタカナ、全角カタカナ
                //
                //
                //
            }

            if ((type[i] & C3_HIRAGANA) == C3_HIRAGANA)
            {
                // 全角ひらがな
                //
                //
                //
            }
        }
    }
    else
    {
        // 取得失敗
        //
        //
        //
    }

    // 文字情報の解放
    delete [] type;

    return;
}
(メモ)
以下の点に注意
カタカナは、「C3_KATAKANA」と「C3_HALFWIDTHまたはC3_FULLWIDTH」の2カ所に引っ掛かる
漢字、ひらがなは、「C3_FULLWIDTH」に引っ掛からない
MSDNライブラリの「GetStringTypeEx」を参照のこと

ネタ元