$include "windowssdk.inc" WINDOW win CONST IDTABCONTROL=2 OPENWINDOW win,0,0,1024,768,@MINBOX|@MAXBOX|@SIZE,0,"Tab Control",&msgHandler TabControl win,0,4,1006,24,@BORDER|@TABSTOP|@TCS_TOOLTIPS|@TCS_OWNERDRAWFIXED,0,IDTABCONTROL SETFONT win,"Tahoma",8,700,0x00FF0000,IDTABCONTROL 'OEM Charset ' SETFONT win,"Tahoma",8,700,0x00A10000,IDTABCONTROL 'Greek ISTRING LPFNPROP[9]="TLZ8TD96" tcInsertTab win,IDTABCONTROL,0,"Larry McCaughn" tcInsertTab win,IDTABCONTROL,1,"GWS" tcInsertTab win,IDTABCONTROL,2,"Brian Pugh" tcInsertTab win,IDTABCONTROL,3,"Egil" tcInsertTab win,IDTABCONTROL,4,"Andy Hunt" tcSetTip win,IDTABCONTROL,0,tcGetTabText(win,IDTABCONTROL,0) tcSetTip win,IDTABCONTROL,1,tcGetTabText(win,IDTABCONTROL,1) tcSetTip win,IDTABCONTROL,2,tcGetTabText(win,IDTABCONTROL,2) tcSetTip win,IDTABCONTROL,3,tcGetTabText(win,IDTABCONTROL,3) tcSetTip win,IDTABCONTROL,4,tcGetTabText(win,IDTABCONTROL,4) SetProp(GETCONTROLHANDLE(win,IDTABCONTROL),LPFNPROP,SetWindowLong(GETCONTROLHANDLE(win,IDTABCONTROL),GWL_WNDPROC,&MyTabProc)) tcSetSelectedTab(win,IDTABCONTROL,0) WAITUNTIL IsWindowClosed(win) END SUB msgHandler(),INT SELECT @MESSAGE CASE @IDCREATE CENTERWINDOW win CASE @IDCLOSEWINDOW CLOSEWINDOW win ENDSELECT RETURN 0 ENDSUB SUB MyTabProc(int hWnd,UINT uMsg,int wParam,int lParam),int INT proc UINT hDC,hBr,oBrush STRING txt proc=GetProp(hWnd,LPFNPROP) SELECT uMsg CASE WM_DESTROY ' remove subclass and delete window property SetWindowLong(hWnd,GWL_WNDPROC,proc) RemoveProp(hWnd,LPFNPROP) CASE WM_DRAWITEM hDC=*lParam.hDC SetBkMode(hDC,TRANSPARENT) SetTextAlign(hDC,TA_CENTER|TA_BASELINE) IF IsWindowEnabled(hWnd) IF *lParam.itemState=1 hBr=CreateSolidBrush(RGB(178,164,226)) SetTextColor(hDC,GETSYSCOLOR(COLOR_HIGHLIGHTTEXT)) ELSE hBr=CreateSolidBrush(GETSYSCOLOR(COLOR_BTNFACE)) SetTextColor(hDC,GETSYSCOLOR(COLOR_BTNTEXT)) ENDIF ELSE IF *lParam.itemState=1 hBr=CreateSolidBrush(GETSYSCOLOR(COLOR_BTNFACE)) SetTextColor(hDC,GETSYSCOLOR(COLOR_BTNTEXT)) ELSE hBr=CreateSolidBrush(GETSYSCOLOR(COLOR_BTNFACE)) SetTextColor(hDC,GETSYSCOLOR(COLOR_BTNTEXT)) ENDIF ENDIF oBrush=SelectObject(hDC,hBr) winrect b=*lParam.rcitem FillRect(hDC,b,hBr) txt=tcGetTabText(win,IDTABCONTROL,*lParam.itemID) TextOut(hDC,b.left+(b.right-b.left)/2,b.top+14,txt,LEN(txt)) SelectObject(hDC,oBrush) deleteObject(hBr) RETURN 0 CASE WM_ENABLE InvalidateRect(hWnd,NULL,FALSE) RETURN 0 ENDSELECT RETURN CallWindowProc(proc,hWnd,uMsg,wParam,lParam) ENDSUB