As with all Windows Common Controls, you can find these in the Platform SDK on MSDN Library Online[^]. For the common controls, see http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/wincontrols.asp[^]. Under "Individual Controls" you'll find documentation on the control messages you want. You should take a look at the rest of the stuff, too. You can try overriding OnKeyDown, although IIRC Ctrl+Tab is handled a little differently. You can find more information about handling the notification messages in the application pump (using an IMessageFilter perhaps) if this is the case in the .NET Framework SDK (find the interface in the help index I mentioned) and in the Platform SDK. In order to determine which tab he clicked on, you're going to have to do a lot of this yourself. You can override the OnMouseDown event which gives you coordinates relative to the client (TabControl). Then enumerate your TabPages and call TabControl.GetTabRect with each one (or rather, their index) and use Rectangle.Contains to see which they clicked on. Other ways most likely won't work because you stopped the tabs from changing, so the other messages that fire events in .NET won't be sent and received. In cases when you derive a control, you should override the On_Event_ method, calling base.On_Event_ before or after your code (depending on the circumstances). Handle these events from outside the class. This improves performance slightly and makes for a better polymorphic design.
Microsoft MVP, Visual C# My Articles