Skip to content

Instantly share code, notes, and snippets.

@biac
Created April 15, 2012 06:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save biac/2390340 to your computer and use it in GitHub Desktop.
Save biac/2390340 to your computer and use it in GitHub Desktop.
Demo1Page.ToKatakanaButton_Click_1() / ToHiraganaButton_Click_1()
private void ToKatakanaButton_Click_1(object sender, RoutedEventArgs e)
{
this.TextArea.Text = NativeMethods.StringConvertToKatakana(this.TextArea.Text);
}
private void ToHiraganaButton_Click_1(object sender, RoutedEventArgs e)
{
this.TextArea.Text = NativeMethods.StringConvertToHiragana(this.TextArea.Text);
}
// (中略)
internal static class NativeMethods
{
// 以下、知ってる人にはお馴染みの、文字種変換メソッド。
// …なんだけど、Win8 Metro では NG! (Cert.Kitでのチェックで怒られる)
[DllImport("Kernel32.dll")]
static extern int LCMapStringW(int Locale,
uint dwMapFlags,
[MarshalAs(UnmanagedType.LPWStr)]string lpSrcStr,
int cchSrc,
[MarshalAs(UnmanagedType.LPWStr)]
string lpDestStr,
int cchDest
);
internal static string StringConvertToKatakana(string src)
{
return StringConvert(src, dwMapFlags.LCMAP_KATAKANA);
}
internal static string StringConvertToHiragana(string src)
{
return StringConvert(src, dwMapFlags.LCMAP_HIRAGANA);
}
internal static string StringConvert(string oriString, dwMapFlags flags)
{
string retStr = new string(' ', oriString.Length);
LCMapStringW(1041, (uint)flags, oriString, oriString.Length, retStr, retStr.Length);
return retStr;
}
[Flags]
internal enum dwMapFlags : uint
{
// (省略)
LCMAP_HIRAGANA = 0x00100000,//ひらがなにします。
LCMAP_KATAKANA = 0x00200000,//カタカナにします。
// (省略)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment