Hola Raul338 me explicas un poco que hace IOleInPlaceActive porque lo estoy viendo en un par de modulos pero no entendi bien cual es su función.
Como no, las ventanas en vb tienen una Implementacion esa Interfaz IOLEInPlaceActiveObject que es con la que manejan el foco. Si intentas crear un UserControl con un textbox creado por API, no te dectetará las teclas de las flechas para manejarse entre los caracteres, sino que ira pasando el foco entre otros controles (un CommandButton por ejemplo) y es posible que nunca mas obtenga el foco mediante el teclado (no importa cuantas veces presiones tab xD)
Entonces, lo que hay que hacer es pisar y poner nuestra implementacion de IOLEInPlaceActiveObject, que no es mas que un conjunto de punteros a funciones (fijate en el sub pvInitIPAO creo la interfaz y le seteo un Me para obtener la Interfaz, de ahi en mas es simplemente manejo de punteros). Para "pisarlo" hay que hacerlo cuando se recibe el WM_SETFOCUS y de ahi decimos "mira, usa este IOLEInPlaceActiveObject" que es el TranslateAccelerator el que deberia hacer el trabajo (fijate el pvTranslateAccel) de ahi lo que se devuelva es como un "Cancel", si lo manejamos nosotros o no. En el caso del textbox mediante api pondriamos para que no tome las felchitas y asi no pierda el foco. Lo mismo cuando se presiona Tab le pondriamos foco al control creado por api

Es una explicacion rapida. Hay mas info en ingles en
vbAccelerator y un par de paginas mas que ahora no encuentro el link
