В своем конроле нужно ловить VK_LEFT, VK_UP и т.д. У меня они работают, как табуляция. Чего я не просек?
Если твой контрол используется в диалоге, то на сообщение WM_GETDLGCODE он должен отвечать return DLGC_WANTARROWS; Подробности ищи в блоге Реймонда Чена и в упомянутой им статье KB Q83302.