- PR -

C#: IME 変換中の文章の表示位置

1
投稿者投稿内容
seltzer
会議室デビュー日: 2002/07/11
投稿数: 3
投稿日時: 2002-07-26 09:31
お世話になっております。
C# での、自作エディタ作りに挑戦しています。

そこで、分からないことがあるのですが、文章を打ち込んだときに
画面上のカレットの位置に表示するという部分ができあがったのですが、
IME を ON にして、打ち込み始めたとき、変換前の状態の文章が
ウィンドウの外に出てしまいます。

確定すると、きちんと想定した位置に挿入されるのですが、
ちょっと格好悪いです。たぶん、IME を制御する API などを
いじれば、出来るのではないかと思い、資料をあさってみたのですが、
IME を ON/OFF するという方法などは見つかるものの、変換中の
文章の表示位置の制御については、情報が見つかりませんでした。

何か、ヒントになることを教えて頂けませんでしょうか。
お願い致します。
だいぼう
会議室デビュー日: 2002/07/24
投稿数: 9
投稿日時: 2002-07-26 23:05
IMEをC#から制御する方法を僕も探してたんですが,APIを呼ぶしかないのではないかと以前あきらめました.
その時参考にした,C#での例ではないのですが,C++でIMEを利用しているエディタ製作のホームページが参考にはならないでしょうか?
もし,ご存知でしたらすいません.

エディタが完成したら是非教えてください.いろいろ使ってみたいです.
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2003-01-06 17:34
> 何か、ヒントになることを教えて頂けませんでしょうか。

すでに解決しているかも知れませんが、Win32 API(プラットフォームSDK)にある以下の関数を順番に呼び出せば何とかなります。

ImmGetContext (入力コンテキストのハンドルを取得)
ImmSetCompositionWindow (入力ウインドウに場所などを指定)
ImmReleaseContext (取得した入力コンテキストのハンドルを解放)

上記関数を使用するためにはSystem.Runtime.InteropServices.DllImportで「imm32.dll」をインポートして使用します。詳しくはヘルプの「プラットフォーム呼び出しチュートリアル」などを参照して下さい。
ただし、各関数で使用している値、構造体などの変換などには苦労することと思います。何しろ一部の型については対応する.NETでの型がヘルプには一切記載されていませんので。

後は、Control#WndProcメソッドをオーバーライドしてMessageの内容を判断してIMEの入力が開始されたかどうかを判断し、上記関数で場所などを指定することになるはずです。

[ メッセージ編集済み 編集者: 二天 編集日時 2003-01-06 17:51 ]
1

スキルアップ/キャリアアップ(JOB@IT)