I think it should work with a CWnd. To set the tab order dynamically, call SetWindowPos, like this
pWindowBefore->SetWindowPos( pWindowAfter, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE );
where you want pWindowAfter to be the control that gets tabbed to when pWindowBefore has the focus and the user hits Tab. Creation order should set the initial tab order, so if you create your controls in the order that they should be tabbed between, you should be OK. If you are using a fully custom control, there's some wierd issues with focus (like needing to manually call SetFocus when you get a WM_LBUTTONDOWN). I can't really remember the specifics, but mess around with the SetFocus, and see where it takes you. Chris Richardson C/C++ Include Finder[^]