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


たま  2005-07-03 01:07:16  No: 58147

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-03 03:37:14  No: 58148

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


たま  2005-07-04 02:55:07  No: 58149

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

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


koo  2005-07-05 10:39:34  No: 58150

単純にダイアログに 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 10:41:25  No: 58151

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


たま  2005-07-06 07:04:15  No: 58152

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

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

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


たま  2005-07-09 22:26:41  No: 58153

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

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

処理は

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

この一文のみです

宣言は

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

どうかご尽力ください


木村悟  2005-11-18 02:36:02  No: 58154

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

SCS_SETSTR = H80 <---この値


Blue  2005-11-18 02:44:33  No: 58155

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加