トラバースキー詳細
まず translateMnemonic の詳細を追ってみる。
とりあえずのところ、対象はコンボ・コントロールなので、
コンボ・コントロールに絞ってオーバーライドの有無などを確認していこう。
恐らくは、他のコントロールでも、同じような処理をしているだろうから、
ポイントさえ押さえられれば、後は楽になるであろう事を期待しよう。笑
さて、translateMnemonic の内容は、以下の通り。
boolean translateMnemonic (MSG msg, Control control) { switch (msg.message) { case OS.WM_CHAR: case OS.WM_SYSCHAR: return control.translateMnemonic (msg); } return false; }
おっと、WM_CHAR か WM_SYSCHAR でなければ、処理しないようだ。
とすると、矢印キー等は、ここを通らないのではないかな?
確認してみよう。
ログを仕込んで確認してみたら、やはり、矢印キーは、ここを通らないようだ。
であれば、この処理は、スルーだな。
では、次は、translateTraversal だな。
boolean translateTraversal (MSG msg, Control control) { switch (msg.message) { case OS.WM_KEYDOWN: switch ((int)/*64*/msg.wParam) { case OS.VK_RETURN: case OS.VK_ESCAPE: case OS.VK_TAB: case OS.VK_UP: case OS.VK_DOWN: case OS.VK_LEFT: case OS.VK_RIGHT: case OS.VK_PRIOR: case OS.VK_NEXT: return control.translateTraversal (msg); } break; case OS.WM_SYSKEYDOWN: switch ((int)/*64*/msg.wParam) { case OS.VK_MENU: return control.translateTraversal (msg); } break; } return false; }
思いっきりトラバースキーが列挙されていますね。
試しに、ここを殺せば、トラバースキーが無効になるのかな?
やってみよう。
上記の処理を無効にしてみたところ、トラバースキー自体は無効になったようだが、
コントロール個々の処理は未だ有効のようだ。
ふむ。