トラバースキー詳細

まず 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;
}

思いっきりトラバースキーが列挙されていますね。
試しに、ここを殺せば、トラバースキーが無効になるのかな?
やってみよう。
上記の処理を無効にしてみたところ、トラバースキー自体は無効になったようだが、
コントロール個々の処理は未だ有効のようだ。
ふむ。