2015年12月23日 9:22 am #22258
Yutaka Emura
キーマスター
redakt55 様
いつもお世話になっております。江村です。
こちらでも再現しました。調べたところ、Windows API の lstrcmpi 関数、CompareString 関数に原因があることがわかりました。
記録のために書いておくと、
lstrcmp( L"㆑", L"" )
を実行すると、片方が空の文字列で、2 つの文字列が異なるため、0 以外の値が戻り値になるはずですが、0 を返しています。
lstrcmp( L"㆐", L"" )
lstrcmp( L"あい", L"㆐あ㆑い" );
なども、0 を返してしまいます。どうやら比較の前に、L”㆑” と L”㆐” は、空の文字列と同じとみなされているようです。
CompareString( LOCALE_INVARIANT, 0, L"㆑", -1, L"", -1 )
としても同様に CSTR_EQUAL を返しました。
そこで、代わりに wcscmp を使用すれば問題はなくなるのですが、Windows 内部で lstrcmp (または CompareString) が使われているためか、それだけでは完全に修正できませんでした。一度ツールチップを破壊してから、再作成すればいいかもしれませんが、パフォーマンスに影響を与える可能性があるため行っていません。将来のバージョンでは、別の方法で修正を検討します。
よろしくお願い申し上げます。