C++ 2005 ネーティブでプログラムしています。
数個の特定のエディットボックスにカーソルが移った時に、IMEの操作を強制的に替えて、ひらがなまたはカタカナを入力するプログラムしていますが、ひらがな、カタカナには予定通りに変わるのですが、一般を無変換に変更が出来ません。無変換に変更する方法をお教え下さい。
{
HIMC himc;
himc = ImmGetContext(m_edit1.m_hWnd);
ImmSetOpenStatus(himc, TRUE);
if (Hira_Kana == 0) { ImmSetConversionStatus(himc, IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE | IME_CMODE_ROMAN, IME_SMODE_NONE);
else ImmSetConversionStatus(himc, IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE | IME_CMODE_KATAKANA | IME_CMODE_ROMAN, IME_SMODE_NONE);
ImmReleaseContext(m_edit1.m_hWnd, himc);
}
このときIME_SMODE_NONEの変換モードが全く変化しません。入力モードは作用しています。
なお、私のIMEは MS IME Standard 2003です。
完成したプログラムは、広く他の方にも開放していますので、MS IMEは2003以外でもXP以降なら、問題なく動く必要があります。
よろしくお願いします。
未確認ながら・・・
無変換とは?
英数半角モードか、かな漢字変換OFF 状態と等価ではない
でしょうか。
参考まで・・・
無変換とは、
ひらがな・カタカナをローマ字入力していると、「一般」では常にアンダーラインが付いていますので、ENTERキーを押して確定する必要がありますが、「無変換」にすると、ひらがな・カタカナを入力した時にアンダーラインが出なくて便利なのです。
なお、imm.hをインクルードし、imm32.libをリンクさせています。
よろしく。
「ひらがな」「全角カタカナ」「全角英数」「半角カタカナ」「半角英数」の並びではなくて、「一般」「人名/地名」「話し言葉優先」「無変換」の「無変換」のことですか?
aetosさん
そうです。 その「一般」「人名」「話し言葉」などの変換モードの変更が色々試してみても全く設定できないのです。
入力モードは「ひらがな」または「カタカナ」に設定し、変換モードを「無変換」に設定したいのです。
よろしくお願いします。
ImmSetConversionStatus の、3個目のパラメータ
IME_SMODE_ENUM を、変更してみたけど、正常に動作
しましたヨ!
因みにVISTA Ultimate + Office IME 2007でです。
※ http://www.mitene.or.jp/~sugisita/vb6_ime.html
ここのVB6サンプルででも正常に動作しました。
以上。参考まで・・・
オショウさん
情報を有難うございました。 VB6は再現できなかったので、サンプルの中身はまだ見ておりませんが、ENUMの概念は全く持ち合わせていませんでしたので、勉強になりました。
Public Enum IME_CMODE_ENUM As Integer;
Public Enum IME_SMODE_ENUM As Integer;
等で、入力モードと変換モードの数値を設定した上で、例えば、
ImmSetConversionStatus(himc, IME_CMODE_ENUM.IME_CMODE_KATAKANA等のようにすれば好いのでしょうかね?
でも、C++ではimm.hに総て設定されているようなので、ENUMを記載する必要があるのか、もう少し試行錯誤して見ます。
とりあえず、私のプログラムでは、ユーザーが必ず一旦は、ひらがな・カタカナの無変換を選ぶ作業がありますので、沢山あるIME操作の説明をインターネット上であれこれと読んで、何とか解決しました。
すなわちカーソルがエディットボックスから離れる時にグローバル変数dwConvとdwSentに読み込んで、それを次回にカーソルが戻った時にセットするようにしたところ使えるようになりました。 ただし、カタカナはIME_CMODE_KATAKANA | dwConv, dwSent);にする必要がありました。
皆さん、有難うございました。 一応解決とさせていただきます。
ツイート | ![]() |