【要望?】WM_CHAR における u の入力

  1. ks です.大変マニアックな部分について,要望というか確認です.

    プラグインの PluginProc 関数の MP_PRE_TRANSLATE_MSG で,WM_CHAR を処理して TRUE を返すと,通常はそれ以降のメッセージ処理はされません.
    ただ,u の文字だけは何故かキャンセルされずにエディタに入力されます.

    今試していたのが下の列挿入プラグインで,幅 0 の矩形選択をした状態で入力すると列に文字を入力します.
    http://merysmacro.up.seesaa.net/plugins/ColumnInsert.zip
    ※まだ未完成で,クリップボートが書き換えられるのでご注意を
    ただ上記の問題がありまして,u を入力すると行先頭にも挿入されてしまうと言う状況でして.

    一応 WM_KEYDOWN で処理して遮断することで,u でも対応できることは確認しています.
    ですが,もし何らか対応方法がありましたら,ご検討いただければと思います.
    尚,仕様と言うことでしたら,そういうものだと納得しますので.

     |  ks  |  返信
  2. ご報告ありがとうございます。

    確かに、u の文字だけハンドリングが効かずにスルーパスされて来ますね。
    調べてみましたところ、Mery 本体側での処理が関係しておりました。

    プラグイン側の PreTranslateMessage で全ての処理を遮断できてしまうと本体側 F6 キーなどに割り当てられているペイン切り替えの機能すら効かなくなってしまうため、「次のペイン」「前のペイン」「アクティブなペイン」のショートカットのみ PreTranslateMessage  で遮断できないようにしています。

    のはずなんですが、本来、WM_KEYDOWN のみ上記の処理を行えば良いところを、他のメッセージの場合でも同様の処理が走るようになっており、WM_CHAR などでたまたま上記処理の判定で使用している wParam が一致してしまった場合 (u キーの時) に処理が遮断されずにスルーされてしまっておりました。

    これは恥ずかしい不具合です、すみませんorz
    修正させていただきます。

     |  Kuro  |  返信
  3. 早速確認いただきまして,ありがとうございます.

    > のはずなんですが、本来、WM_KEYDOWN のみ上記の処理を行えば良いところを、他のメッセージの場合でも同様の処理が走るようになっており、WM_CHAR などでたまたま上記処理の判定で使用している wParam が一致してしまった場合 (u キーの時) に処理が遮断されずにスルーされてしまっておりました。
    u が処理されてなかったのは本当に偶然だったのですね.
    面倒な部分かとは思いますが,修正お願いいたします.

    # 以前にも確かツールバーを試していたとき,ツールバー上のエディットボックスに u が 2 回入力されることがありましたが,それも同じ原因であることを期待しています.

     |  ks  |  返信