* * *    
Главная » Статьи » Код PB

Просмотров: 1934 | Дата: 09.05.2024 | Коментарии (0)

Frame3D цвет



Code
; Title: Frame3DGadget with custom text color / Theme Support / 64-Bit
;
; Author: Christian Kemna (Fluid Byte)
; Created: December 31, 2006
; Updated: June 29, 2010
; Version: PureBasic V4.XX
; Platform: Windows XP and higher
; Internet: http://www.codedreality.de/
; E-Mail: ckemna@t-online.de

EnableExplicit

Structure FRAME3DEX
  lpPrevFunc.i
  clrText.l
  bThemeXP.b
EndStructure

Procedure Frame3DExProc(hWnd,uMsg,wParam,lParam)
  Protected *frmex.FRAME3DEX, hDC, ps.PAINTSTRUCT, Title.s, fts.SIZE, wrc.RECT, lpBuffer, hThemeButton
   
  *frmex = GetWindowLongPtr_(hwnd,#GWL_USERDATA)
   
  Select uMsg
  Case #WM_NCDESTROY
  FreeMemory(*frmex)
  ProcedureReturn 0
   
  Case #WM_PAINT  
  hdc = BeginPaint_(hwnd,ps)
   
  SelectObject_(hdc,SendMessage_(hwnd,#WM_GETFONT,0,0))
   
  Title = GetGadgetText(GetDlgCtrlID_(hwnd))  
  GetTextExtentPoint32_(hdc,Title,Len(Title),fts)  
  GetClientRect_(hWnd,wrc)
  SetRect_(wrc,wrc\left,wrc\top + fts\cy / 2,wrc\right,wrc\bottom)
   
  If OSVersion() >= #PB_OS_Windows_XP And IsThemeActive_() And IsAppThemed_() And *frmex\bThemeXP
  lpBuffer = AllocateMemory(14) : PokeS(lpBuffer,"Button",-1,#PB_Unicode)  
   
  hThemeButton = OpenThemeData_(WindowID(0),lpBuffer)
  DrawThemeBackground_(hThemeButton,hdc,4,1,wrc,0)
  CloseThemeData_(hThemeButton)
   
  FreeMemory(lpBuffer)
  Else
  DrawEdge_(hdc,wrc,#EDGE_ETCHED,#BF_RECT)
  EndIf
   
  If GetWindowColor(0) > -1
  SetBkColor_(hdc,GetWindowColor(0))
  Else
  SetBkColor_(hdc,GetSysColor_(#COLOR_3DFACE))
  EndIf
   
  SetTextColor_(hdc,*frmex\clrText)
  TextOut_(hdc,9,0,Title,Len(Title))  
   
  EndPaint_(hwnd,ps)
   
  ProcedureReturn 0
  EndSelect
   
  ProcedureReturn CallWindowProc_(*frmex\lpPrevFunc,hWnd,uMsg,wParam,lParam)  
EndProcedure

Procedure Frame3DGadgetEx(Gadget,X,Y,Width,Height,Text.s,Color.l=0)  
  Protected *frmex.FRAME3DEX, HINSTANCE, hResData, Length
  Protected dvi.DLLVERSIONINFO\cbsize = SizeOf(DLLVERSIONINFO)
   
  Frame3DGadget(Gadget,X,Y,Width,Height,Text)
   
  *frmex = AllocateMemory(SizeOf(FRAME3DEX))
  *frmex\lpPrevFunc = SetWindowLongPtr_(GadgetID(Gadget),#GWL_WNDPROC,@Frame3DExProc())
  *frmex\clrText = Color
   
  HINSTANCE = OpenLibrary(#PB_Any,"comctl32.dll")
   
  If HINSTANCE
  CallFunction(HINSTANCE,"DllGetVersion",@dvi)
  If dvi\dwMajorVersion = 6 : *frmex\bThemeXP = #True : EndIf
  CloseLibrary(HINSTANCE)
  EndIf

  SetWindowLongPtr_(GadgetID(Gadget),#GWL_USERDATA,*frmex)
   
  ProcedureReturn GadgetID(Gadget)
EndProcedure

SetGadgetFont(#PB_Default,LoadFont(0,"Arial",9))

OpenWindow(0,0,0,400,300,"Ownerdraw Frame3D Control",#WS_OVERLAPPEDWINDOW | 1)
Frame3DGadgetEx(0,10,5,200,90,"Frame3DGadgetEx #1",#Red)
Frame3DGadgetEx(1,10,100,200,90,"Frame3DGadgetEx #2",RGB(187, 193, 201))
Frame3DGadgetEx(2,10,195,200,90,"Frame3DGadgetEx #3",#Blue)

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.