'I Just included comments on every important lines.Sorry for my bad english.
'I developed this program by converting the C Documentation to VB and experiments with VB.
'You can improve this program by your experiments.I didn't done all parts of the
'TabControl.
Option Explicit
Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME
Public Const WS_CHILD = &H40000000
Public Const WS_CLIPCHILDREN = &H2000000
Public Const WS_CLIPSIBLINGS = &H4000000
Public Const WS_DISABLED = &H8000000
Public Const WS_DLGFRAME = &H400000
Public Const WS_EX_ACCEPTFILES = &H10&
Public Const WS_EX_DLGMODALFRAME = &H1&
Public Const WS_EX_NOPARENTNOTIFY = &H4&
Public Const WS_EX_TOPMOST = &H8&
Public Const WS_EX_TRANSPARENT = &H20&
Public Const WS_GROUP = &H20000
Public Const WS_HSCROLL = &H100000
Public Const WS_MAXIMIZE = &H1000000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_MINIMIZE = &H20000000
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_OVERLAPPED = &H0&
Public Const WS_POPUP = &H80000000
Public Const WS_SYSMENU = &H80000
Public Const WS_TABSTOP = &H10000
Public Const WS_THICKFRAME = &H40000
Public Const WS_VISIBLE = &H10000000
Public Const WS_VSCROLL = &H200000
Public Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Public Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Const GWL_HINSTANCE = (-6)
Public Const GWL_EXSTYLE = (-20)
Public Const GWL_HWNDPARENT = (-8)
Public Const GWL_ID = (-12)
Public Const GWL_STYLE = (-16)
Public Const GWL_USERDATA = (-21)
Public Const GWL_WNDPROC = (-4)
Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
Public Type WNDCLASS
style As Long
lpfnwndproc As Long
cbClsextra As Long
cbWndExtra2 As Long
hInstance As Long
hIcon As Long
hCursor As Long
hbrBackground As Long
lpszMenuName As String
lpszClassName As String
End Type
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Public Const CS_BYTEALIGNCLIENT = &H1000
Public Const CS_BYTEALIGNWINDOW = &H2000
Public Const CS_CLASSDC = &H40
Public Const CS_DBLCLKS = &H8
Public Const CS_HREDRAW = &H2
Public Const CS_INSERTCHAR = &H2000
Public Const CS_KEYCVTWINDOW = &H4
Public Const CS_NOCLOSE = &H200
Public Const CS_NOKEYCVT = &H100
Public Const CS_NOMOVECARET = &H4000
Public Const CS_OWNDC = &H20
Public Const CS_PARENTDC = &H80
Public Const CS_PUBLICCLASS = &H4000
Public Const CS_SAVEBITS = &H800
Public Const CS_VREDRAW = &H1
'Public Declare Function INITCOMMONCONTROLSEX Lib "COMCTL32.DLL" Alias "InitCommonControlsEx" (ByVal hInstance As Long) As Long 'Boolean
Public Const WM_USER = &H400
Public Type POINTAPI
x As Long
y As Long
End Type
Public Const CCM_FIRST = &H2000 ' Common control shared messages
Public Const CCM_SETUNICODEFORMAT = (CCM_FIRST + 5)
Public Const CCM_GETUNICODEFORMAT = (CCM_FIRST + 6)
'====== TAB CONTROL ==========================================================
Public Const TCM_FIRST = &H1300 ' Tab control messages
Public Const WC_TABCONTROLA = "SysTabControl32"
' begin_r_commctrl
'#if (_WIN32_IE >= = &h0300)
Public Const TCS_SCROLLOPPOSITE = &H1 ' assumes multiline tab
Public Const TCS_BOTTOM = &H2
Public Const TCS_RIGHT = &H2
Public Const TCS_MULTISELECT = &H4 ' allow multi-select in button mode
ICC_DATE_CLASSES = &H100 ' month picker, date picker, time picker, updown
ICC_USEREX_CLASSES = &H200 ' comboex
ICC_COOL_CLASSES = &H400 ' rebar (coolbar) control
#If (WIN32_IE >= &H400) Then '
ICC_INTERNET_CLASSES &H800
ICC_PAGESCROLLER_CLASS &H1000 ' page scroller
ICC_NATIVEFNTCTL_CLASS &H2000 ' native font control
#End If
End Enum
Public Type INITCOMMONCONTROLSEX
dwSize As Long 'DWORD ; // size of this structure
dwICC As ComCtlClasses 'Long 'DWORD ; // flags indicating which classes to be initialized
End Type '} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
Public Declare Function INITCOMMONCONTROLSEX Lib "COMCTL32.DLL" Alias "InitCommonControlsEx" (ICCClass As INITCOMMONCONTROLSEX) As Long 'Boolean
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Wnd As Long 'Ony one Global variable for all operations
Function CreateTabControl(ByVal hwnd As Long) As Long
'This is the main function.It Creates a tabcontrol window and returns the window handle
'You can modify this function by including Coordinate Parameters,style etc.
Dim stl As Long
Dim IX As INITCOMMONCONTROLSEX, Inited As Long
IX.dwICC = ICC_TAB_CLASSES
IX.dwSize = Len(IX)
Inited = INITCOMMONCONTROLSEX(IX)
'If CommonControl library is not initialized the program does'nt work.
If Inited <> 1 Then
MsgBox "INITCOMMONCONTROLSEX Failed.", vbCritical
End If
stl = WS_CHILD Or WS_VISIBLE 'Or WS_THICKFRAME
'Here i gives the different styles for the tabcontrol
'stl = stl Or TCS_BOTTOM 'Tabs appear in bottom
'stl = stl Or TCS_BUTTONS 'Button Style tabs
'stl = stl Or TCS_FIXEDWIDTH 'Tabs have fixed width
stl = stl Or TCS_FLATBUTTONS 'FlatButton style
'stl = stl Or TCS_FORCELABELLEFT '
stl = stl Or TCS_HOTTRACK 'hottracking
stl = stl Or TCS_MULTILINE 'Multi-rows
stl = stl Or TCS_MULTISELECT 'Multiselction
stl = stl Or TCS_TABS 'Style Tabs
'stl = stl Or TCS_VERTICAL 'Vertical
'stl = stl Or TCS_RIGHTJUSTIFY
stl = stl Or TCS_TOOLTIPS ' You must create the tooltipcontrol
'stl = stl Or TCS_FOCUSONBUTTONDOWN 'I didn't deeply tested it
'stl = stl Or TCS_SCROLLOPPOSITE 'explorerbar style scrolling of tabs
'stl = stl Or TCS_SINGLELINE ' Adds scrolling buttons
'Creates the tabcontrolwindow.
'It is very fast and safe function.In VB the dynamic control creation is not possible when the controls are kept in DLLS that not compatible with VB.
'If the control not created no errpat e contr IX.dOen(IX)