フリガナを取得する方法

[戻る]
クリリン 2002/04/08(月) 13:22:11
どうも、クリリンです。
環境は、Win2000 Pro(SP2),VC++6.0(SP5),MFCです。

現在、あるAというエディットボックスにIMEモードで入力したら、Bというエディットボッ
クスに半角のフリガナを自動的に代入する…といった事がしたいのですが、どうしたら制御でき
るのでしょうか?(ちなみに、IMEのモード切替等は出来ています。)

まず、そのこと事について、猫でもわかるプログラミングで、調べました。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_281.htm
そこで2つ質問があります。

1つ目:
このページの「WM_IME_COMPOSITIONメッセージを捕まえたら…」とありますが、
エディトボックスに「WM_IME_COMPOSITION」のメッセージを追加するにはどうしたらいいのでしょう
か?(もし、サブクラス化とか等で有れば、具体的に教えて欲しいのですが・・・)
2つ目:
「ImmGetCompositionString」の引数「dwIndex」のパラメータはどれを使用したら半角のカ
タカナが取得できるのでしょうか?ヘルプを見る限りなさそうな気がするのですが・・・(私の
英語の読解力が足りないのかもしれませんが・・・)


お手数ですが、皆様、よろしくお願いします。

不良PG 2002/04/08(月) 15:06:17
>このページの「WM_IME_COMPOSITIONメッセージを捕まえたら…」とありますが、
>エディトボックスに「WM_IME_COMPOSITION」のメッセージを追加するにはどうしたらいいの
>でしょう
>か?(もし、サブクラス化とか等で有れば、具体的に教えて欲しいのですが・・・)
ON_MESSAGEを調べましょう

>「ImmGetCompositionString」の引数「dwIndex」のパラメータはどれを使用したら半角のカ
>タカナが取得できるのでしょうか?ヘルプを見る限りなさそうな気がするのですが・・・(私
>の英語の読解力が足りないのかもしれませんが・・・)

http://www.geocities.co.jp/SiliconValley-Oakland/1865/
ここにそのままのサンプルがありました

クリリン 2002/04/08(月) 17:32:02
不良PGさんありがとうございます。

http://www.geocities.co.jp/SiliconValley-Oakland/1865/
ここを見る限り、質問1は必要がないみたいですね。
とりあえず、解決です。

ただ、私の質問が不足していたと思うのですが、
エディトボックスに「WM_IME_COMPOSITION」のメッセージを追加したたかったのです。
もしかしてと思い、
ON_MESSAGE( WM_IME_COMPOSITION, OnImeComposition )
としていたのですが、これだと、エディットボックスが「WM_IME_COMPOSITION」を受取れない
と思うのですが・・・

どうなのでしょうか?

sugar 2002/04/08(月) 17:39:43
> ON_MESSAGE( WM_IME_COMPOSITION, OnImeComposition )
>
これをどのクラスのメッセージマップに追加すべきか、ということになると思うのですが...

クリリン 2002/04/08(月) 17:55:47
[[解決]]
例えば、CHogeDlgというダイアログクラスに

BEGIN_MESSAGE_MAP(CHogeDlg, CDialog)
  //{{AFX_MSG_MAP(CHogeDlg)
  ON_EN_SETFOCUS(IDS_NAME, OnSetfocusName)
  ON_EN_SETFOCUS(IDS_KANA, OnSetfocusKana)
  ON_EN_UPDATE(IDS_NAME, OnUpdateName)
  ON_MESSAGE(WM_IME_COMPOSITION, OnImeComposition) <--ここに追加
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

とメッセージマップに追加すると言う事でしょうか?
実際には、「IDS_NAME」がメッセージを受取る・・・事がしたいのですが・・・

とりあえず、解決にチェックしておきます。

不良PG 2002/04/08(月) 18:16:31
対象のエディットボックスのクラス(無ければ派生させて作成)にメッセージマップを
書きましょう。

ダイアログの場合は、クラスウィザードからエディットボックス用のメンバ変数をコントロール
として追加してCEditを派生クラスのCEdit???に変更すれば勝手にサブクラスしてくれます。

クリリン 2002/04/08(月) 18:51:31
ありがとうございます。
頑張ってみます。

古いスレッドには追加発言できません。