ImmNotifyIMEを正常に動作させるには?


たま  2005-07-02 16:07:16  No: 58147  IP: 192.*.*.*

ImmNotifyIMEの動作が正常に動きません
以下のような、文字列に対して
漢字変換をするボタンのメッセージハンドラです
直前まではうまくいくのですが
ImmNotifyIMEの部分だけうまくいきません
過去ログをみてきましたが、解決策がみつからなかったため
ご教授願えないでしょうか?

void CWebInput::OnButton1() 
{
        HIMC hImc;              //コンテキストハンドル
  BOOL IME;

  strcpy(szInKanaStr,"あい");
  nInKanaStrLen=4;
  HWND hedit=M_CHARA->m_hWnd;              //エディットボックスのハンドル
  hImc=ImmGetContext(hedit);
  ImmSetOpenStatus(hImc,TRUE);
  IME=ImmSetCompositionString(hImc, SCS_SETSTR, szInKanaStr, nInKanaStrLen, NULL, 0);    //入力文字列をセット
  
  IME=ImmNotifyIME(hImc, NI_COMPOSITIONSTR, CPS_CONVERT,0);
}

環境
OS: XP 
開発環境:   VisualC++6.0

編集 削除
koo  2005-07-02 18:37:14  No: 58148  IP: 192.*.*.*

何がどうなることによって正常では無いと判断したのでしょうか?
正常にいったケースの結果と異常だったケースの結果を明記してもらえないでしょうか?

編集 削除
たま  2005-07-03 17:55:07  No: 58149  IP: 192.*.*.*

>koo様
ImmNotifyIMEの戻り値を格納する
BOOL型のIMEに0が返ってきたので
正常でないと判断しました。
正常に動作した場合は戻り値に1が
返ってくるはずなのです。
(前処理のImmSetCompositionStringでは
1が返ってきました)

具体的な結果というものはなく、
VC++経験は浅いので
原因を確かめる方法だけであれば
助かります。

編集 削除
koo  2005-07-05 01:39:34  No: 58150  IP: 192.*.*.*

単純にダイアログに Edit コントロールとボタンを貼り付けて下記のようなソースを記述してみたらImmNotifyIMEは「1」を返してきます。

環境は
OS:W2k
VS6.0 / VS.NET (どちらで作っても)

OS:WinXP
VS6.0 / VS.NET (どちらで作っても)


// ソース

  HIMC hImc;                            //コンテキストハンドル
  BOOL IME;
  char szInKanaStr[16];
  int     nInKanaStrLen=0;

  szInKanaStr[0] = '\0';

  strcpy(szInKanaStr,"あい");
  nInKanaStrLen=4;
  HWND hedit=m_ctlEdit.m_hWnd;            //エディットボックスのハンドル
  hImc=ImmGetContext(hedit);
  ImmSetOpenStatus(hImc,TRUE);
  IME=ImmSetCompositionString(hImc, SCS_SETSTR, szInKanaStr, nInKanaStrLen, NULL, 0);        //入力文字列をセット

  IME=ImmNotifyIME(hImc, NI_COMPOSITIONSTR, CPS_CONVERT,0);

新規に作成して,この点だけやり直してもダメですか?

編集 削除
koo  2005-07-05 01:41:25  No: 58151  IP: 192.*.*.*

ちなみに ::GetLastError とかでエラーもとれないんですよね?

編集 削除
たま  2005-07-05 22:04:15  No: 58152  IP: 192.*.*.*

新規で作り直したらうまくいきました
原因は違うところにあったみたいです

それは関係ないと思って省いていたのですが,
原因はWebブラウザとしてActiveXのIEコンポーネントを
使っているとImmNotifyIMEが正常に動作しない
みたいです

ありがとうございました
もう少し調べてみます

編集 削除
たま  2005-07-09 13:26:41  No: 58153  IP: 192.*.*.*

調べてみましたが
自分の力量では対処方法がわかりませんでした

ActiveXのIEコンポーネントにIMEが優先的に
とられているように思えるのですが

処理は

m_browser.Navigate("http://www.google.co.jp/",NULL,NULL,NULL,NULL);

この一文のみです

宣言は

CWebBrowser2  m_browser;    //ブラウザインスタンス

どうかご尽力ください

編集 削除
木村悟  2005-11-17 17:36:02  No: 58154  IP: 192.*.*.*

SCS_SETSTRの値はどう調べればよいのでしょうか

SCS_SETSTR = H80 <---この値

編集 削除
Blue  2005-11-17 17:44:33  No: 58155  IP: 192.*.*.*

> H80
ってVCの話?(VBっぽ)

編集 削除