[EMAIL PROTECTED] です。

Takashi Nakamoto wrote:
> このページを見る限りでは、OSのバージョンを見て、Win95系の場合は
> Shift_JISに変換して、 WinNT系の場合はUnicode(LE)に変換して、
> ImmGetConversionListWに渡すのがよいということでしょうか。
いや、返されるエンコードがWindows95系の場合は(何故か)Unicodeと言う点に着目していました。
[EMAIL PROTECTED]
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B417206
でもって、返されるエンコードがWindows95系の場合は(何故か)Unicodeである為にここでPlatformIDをチェックしてそれぞれに適したエンコード変換を行う様にする。
この部分は修正してあるので(動作検証は未確認)最後に載せておきます。
ちょっと確証を持てないところは、エンコードの指定が"RTL_TEXTENCODING_UNICODE"でOKなのかと言う点です。

>> 3.99文字で区切って末尾
>> の文字コードを確認、2バイト文字の上位のコードの場合は1文字削除して変
>> 換。削除した一文字は以降の文字列の先頭に追加、以上を繰り返す。と言う所
>> でしょうか。
> 
> これも考えてみたのですが、例えば99文字目が「中」で100文字目が「本」だっ
> た場合には、該当する部分の結果として期待するのは「なかもと」ですが、
> 「ちゅう」と「ほん」に分かれて逆変換されそうです。
- snip -
> そういえば、これは Shift_JIS コードで200バイトの制限がかかっているのか、
> それとも Unicode で200文字の制限がかかっているのか分かりませんね。
> # っていうか、文字(バイト)数の制限があるなんてどこにも書いてへんし
安易に考えすぎましたかね、でもそこを深くやろうとすると構文解析しなくちゃならなくなってしまうので、仕様ということにしませんか?
試してみると、1バイト文字でも2バイト文字でもとにかく100文字までとなっているようです。
ですので、これはIME(or API)側の仕様かと思います。
どれくらいの割合で1つのセルに100文字入力する人がいるだろうかと想像しても、仕様上の制限にした事によって困る人はほとんどいないのではと思います。

> それならば、仮想的にウィンドウを作るというのはダメなのでしょうか?
それはまだ試していません。

--- furigana.orig/furigana_impl.cxx     2006-09-29 23:38:37.000000000 +0900
+++ furigana/furigana_impl.cxx  2006-09-30 17:10:33.656250000 +0900
@@ -34,7 +34,6 @@
 #include <mecab.h>
 #endif
 #if defined(WIN) || defined(WNT)
-//#define _WIN32_WINNT
 #include <windows.h>
 #include <imm.h>
 #endif
@@ -217,6 +216,7 @@
        HKL hKL;
        DWORD aConversionListSize;
        LPCANDIDATELIST aConversionList;
+       OSVERSIONINFO aOSVersionInfo;
 
        m_hWnd = GetActiveWindow();
        hIMC = ImmGetContext(m_hWnd);
@@ -236,7 +236,16 @@
                                ImmGetConversionList(hKL, hIMC, aStr.getStr(), 
aConversionList, aConversionListSize, GCL_REVERSECONVERSION);
 
                                const char *result = (const char 
*)aConversionList + aConversionList->dwOffset[0];
-                               res += OUString(result, strlen(result), 
RTL_TEXTENCODING_SHIFT_JIS);
+                               aOSVersionInfo.dwOSVersionInfoSize = 
sizeof(aOSVersionInfo);
+                               GetVersionEx(&aOSVersionInfo);
+                               if(aOSVersionInfo.dwPlatformId < 2)
+                               {
+                                       res += OUString(result, strlen(result), 
RTL_TEXTENCODING_UNICODE);
+                               }
+                               else
+                               {
+                                       res += OUString(result, strlen(result), 
RTL_TEXTENCODING_SHIFT_JIS);
+                               }
 
                                HeapFree(GetProcessHeap(), 0, aConversionList);
                        }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

メールによる返信