- ベストアンサー
imm(日本語入力)が上手く行きません;
多くのソフトで見られるテキストエリアみたいな 自由に日本語を入力できる機能を作りたくて、色々調べています。 しかし、色々調べてほんの数行のコードのテストから試しているのですが、 どれも上手く動かなかったり、imm.h に構文エラーが有ると100以上のエラーが出たりして 全く感触が掴めずにいます・・。 何か最低限でも動作するものが有れば何か掴めると思い MSDNのimeサンプルを落としてみたのですが、何故かコンパイルすら動作せず; さらに調べるうちに 「vistaでは動作しない」 「immについての解説書籍はない」 「少しの環境差でも動作しなくなる」 などの情報が目に付いて、 何が原因で動かないのか混乱しています; とても多くのソフトで日本語入力を当たり前のように扱っているので 動作するのが当たり前だとは思うのですが・・。 immを扱った経験が有る方、 immを扱う手順や、注意点などが有りましたら 教えては頂けませんでしょうか、 環境はVisualC++2008 OS:XP Pro(SP3)です。 みなさんはどうやって日本語入力を実装しているのでしょうか・・? immとは一体どういう手順で実装されるものなのでしょうか・・orz
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>多くのソフトで見られるテキストエリアみたいな >自由に日本語を入力できる機能を作りたくて、色々調べています。 メモ帳と同じ事がしたいだけでしたら#1さんの回答を参考にしてください。 >「vistaでは動作しない」 「immについての解説書籍はない」 「少しの環境差でも動作しなくなる」 VistaからTSF(と呼ばれる物が)がIMEのエミュレーションを行っています。 (SP1以前はこのエミュレーションに問題があったのですがSP1で大分改善されています。) MSは将来的にIMEをこのTSFに置き換えたいようです。 猫でもわかるのサンプルにある http://www.kumei.ne.jp/c_lang/sdk3/sdk_278.htm にあるようなコードはそのままVistaでは動かなかった覚えがありますが ::ImmDisableTextFrameService(-1);(TSFを無効にする)を 最初に実行するとVistaでも動くようになったと思います。 (XP SP2でもTSFが有効だと同じ問題が発生します。) もしIMEの見た目や候補リスト等を全て自分で操作したいなら、 DirectX SDKのサンプルCustomUIの中にあるImeUi.cppというサンプルコードも参考になると思います。 TSFに関しても考慮されており、DirectXの部分を切り離して使う事も可能です。 http://msdn.microsoft.com/ja-jp/directx/default.aspx
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
VC2008のエディションは何ですか? お作りのアプリケーションのタイプは何でしょう? 確かコンソールアプリを作っているのですよね Win32SDKで作成しているなら Imm系で制御といった場合もあると思います .NET Frameworkで作成しているのですと Imm.hをインクリュードするのに必要なヘッダーがImm.hより先にインクリュードしないといけないといった制限がありそうです
お礼
ご回答ありがとうございます; >Microsoft Visual C++ 2008 Express Edition で >Win32 Console Application(多分) を使っています。 DirectXで3Dゲームを作っていて、 いわゆるオンラインゲームのチャットバーみたいな物を作りたくて、 1行分(100文字未満)を稼動中に取得して、 ・ワードに反応するキャラクター ・命令文に目的語を付けて、複雑な操作を個人好みに簡略化できる仕組み などを作りたく思っています orz 「1行分の日本語文字列を、稼動中にchar配列等に格納」さえ出来れば何でも・・ と言った感じです orz imm32.lib というものも一応ライブラリでリンクしているはずなのですが・・ もう少し自分なりにも調べてみますね、
- php504
- ベストアンサー率42% (926/2160)
環境によっていろいろ方法が変わりますがほとんどの人はimmとか使ってないでOSに任せてるのではないでしょうか。 テキストエリアであればリソースのEDITTEXTかCreateWindowでTEXTコントロールを作るのがほとんどでしょう
お礼
ご回答ありがとうございます、 なるほど・・OSに任せられるならば楽なのですね; DirectXでゲームとして作っているのですが、 稼動中のものに最前面にそれを表示させる・・事ができれば簡単そうに思えるのですが・・orz 用途によって仕組みが違うのですね; ありがとうございました
お礼
>MSは将来的にIMEをこのTSFに置き換えたいようです。 そうなのですね; >::ImmDisableTextFrameService(-1);(TSFを無効にする)を >最初に実行するとVistaでも動くようになったと思います。 >(XP SP2でもTSFが有効だと同じ問題が発生します。) なんと・・。 仕様変更時期なのですかね orz >DirectX SDKのサンプルCustomUIの中にあるImeUi.cppというサンプルコード SDKは入っているので、早速見てみました。 これが理想かもしれません・・! 何やら共有?のソースが多いらしく、扱い方が難しそうですが 少し切り張りして試してみようと思います。 ありがとうございましたっ