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様
ImmNotifyIMEの戻り値を格納する
BOOL型のIMEに0が返ってきたので
正常でないと判断しました。
正常に動作した場合は戻り値に1が
返ってくるはずなのです。
(前処理のImmSetCompositionStringでは
1が返ってきました)
具体的な結果というものはなく、
VC++経験は浅いので
原因を確かめる方法だけであれば
助かります。
単純にダイアログに 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);
新規に作成して,この点だけやり直してもダメですか?
ちなみに ::GetLastError とかでエラーもとれないんですよね?
編集 削除新規で作り直したらうまくいきました
原因は違うところにあったみたいです
それは関係ないと思って省いていたのですが,
原因はWebブラウザとしてActiveXのIEコンポーネントを
使っているとImmNotifyIMEが正常に動作しない
みたいです
ありがとうございました
もう少し調べてみます
調べてみましたが
自分の力量では対処方法がわかりませんでした
ActiveXのIEコンポーネントにIMEが優先的に
とられているように思えるのですが
処理は
m_browser.Navigate("http://www.google.co.jp/",NULL,NULL,NULL,NULL);
この一文のみです
宣言は
CWebBrowser2 m_browser; //ブラウザインスタンス
どうかご尽力ください
SCS_SETSTRの値はどう調べればよいのでしょうか
SCS_SETSTR = H80 <---この値
> H80
ってVCの話?(VBっぽ)