Code:
'SED_PBWIN

#COMPILE EXE
#DIM ALL
#DEBUG ERROR ON
#INCLUDE "WIN32API.INC"


' *********************************************************************************************
' Get type of character set - ansi, symbol.. a must for some fonts.
' *********************************************************************************************
FUNCTION EnumCharSet (elf AS ENUMLOGFONT, ntm AS NEWTEXTMETRIC, BYVAL FontType AS LONG, CharSet AS LONG) AS LONG
   CharSet = elf.elfLogFont.lfCharSet
END FUNCTION
' *********************************************************************************************

' *********************************************************************************************
' Create a desirable font and return its handle. Original code by Dave Navarro
' NOTE: enhanced with proper enumeration of character set via chmEnumFontDataProc
' *********************************************************************************************
FUNCTION MakeFontEx(BYVAL FontName AS STRING, BYVAL PointSize AS LONG, BYVAL fBold AS LONG, BYVAL fItalic AS LONG, _
                     BYVAL fUnderline AS LONG) AS DWORD

   LOCAL hDC AS DWORD, CharSet AS LONG, CyPixels AS LONG

   hDC = GetDC(%HWND_DESKTOP)
     CyPixels  = GetDeviceCaps(hDC, %LOGPIXELSY)
     EnumFontFamilies hDC, BYVAL STRPTR(FontName), CODEPTR(EnumCharSet), BYVAL VARPTR(CharSet)
   ReleaseDC %HWND_DESKTOP, hDC
   PointSize = 0 - (PointSize * CyPixels) \ 72

   FUNCTION = CreateFont(PointSize, 0, _  'height, width(default=0)
              0, 0, _                     'escapement(angle), orientation
              fBold, _                    'weight (%FW_DONTCARE = 0, %FW_NORMAL = 400, %FW_BOLD = 700)
              fItalic, _                  'Italic
              fUnderline, _               'Underline
              %FALSE, _                   'StrikeThru
              CharSet, %OUT_TT_PRECIS, _
              %CLIP_DEFAULT_PRECIS, %DEFAULT_QUALITY, _
              %FF_DONTCARE , BYCOPY FontName)

END FUNCTION

SUB DrawGradient (BYVAL hDC AS DWORD)
   LOCAL rectFill AS RECT
   LOCAL rectClient AS RECT
   LOCAL fStep AS SINGLE
   LOCAL hBrush AS DWORD
   LOCAL lOnBand AS LONG

   GetClientRect WindowFromDC(hDC), rectClient
   fStep = rectClient.nbottom / 200

   FOR lOnBand = 0 TO 199
      SetRect rectFill, 0, lOnBand * fStep, rectClient.nright + 1, (lOnBand + 1) * fStep
      hBrush = CreateSolidBrush(RGB((255 - lOnBand), (255 - lOnBand), (255 - lOnBand)))
      Fillrect hDC, rectFill, hBrush
      DeleteObject hBrush
   NEXT
END SUB


' *********************************************************************************************
' Main
' *********************************************************************************************
FUNCTION WINMAIN (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow AS LONG) AS LONG

   LOCAL hWndMain AS dword
   LOCAL hCtl AS DWORD
   LOCAL hFont AS DWORD
   LOCAL wcex AS WndClassEx
   LOCAL szClassName AS ASCIIZ * 80
   LOCAL rc AS RECT
   LOCAL szCaption AS asciiz * 255
   LOCAL nLeft AS LONG
   LOCAL nTop AS LONG
   LOCAL nWidth AS LONG
   LOCAL nHeight AS LONG

   hFont = GetStockObject(%ANSI_VAR_FONT)

   ' Register the window class
   szClassName        = "MyClassName"
   wcex.cbSize        = SIZEOF(wcex)
   wcex.style         = %CS_HREDRAW OR %CS_VREDRAW
   wcex.lpfnWndProc   = CODEPTR(WndProc)
   wcex.cbClsExtra    = 0
   wcex.cbWndExtra    = 0
   wcex.hInstance     = hInstance
   wcex.hCursor       = LoadCursor (%NULL, BYVAL %IDC_ARROW)
   wcex.hbrBackground = %COLOR_3DFACE + 1
   wcex.lpszMenuName  = %NULL
   wcex.lpszClassName = VARPTR(szClassName)
   wcex.hIcon         = LoadIcon (%NULL, BYVAL %IDI_APPLICATION) ' Sample, if resource icon: LoadIcon(hInst, "APPICON")
   wcex.hIconSm       = LoadIcon (%NULL, BYVAL %IDI_APPLICATION) ' Remember to set small icon too..
   RegisterClassEx wcex

   ' Window caption
   szCaption = "SDK Main Window"

   ' Retrieve the size of the working area
   SystemParametersInfo %SPI_GETWORKAREA, 0, BYVAL VARPTR(rc), 0

   ' Calculate the position and size of the window
   nWidth  = (((rc.nRight - rc.nLeft)) + 2) * 0.25   ' 75% of the client screen width
   nHeight = (((rc.nBottom - rc.nTop)) + 2) * 0.20   ' 70% of the client screen height
   nLeft   = ((rc.nRight - rc.nLeft) \ 2) - nWidth \ 2
   nTop    = ((rc.nBottom - rc.nTop) \ 2) - (nHeight \ 2)

   ' Create a window using the registered class
   hWndMain = CreateWindowEx(%WS_EX_CONTROLPARENT, _           ' extended style
                             szClassName, _                    ' window class name
                             szCaption, _                      ' window caption
                             %WS_OVERLAPPEDWINDOW OR _
                             %WS_CLIPCHILDREN, _               ' window style
                             nLeft, _                          ' initial x position
                             nTop, _                           ' initial y position
                             nWidth, _                         ' initial x size
                             nHeight, _                        ' initial y size
                             %NULL, _                          ' parent window handle
                             0, _                              ' window menu handle
                             hInstance, _                      ' program instance handle
                             BYVAL %NULL)                      ' creation parameters

   hCtl = CreateWindowEx(0, "BUTTON", "&Ok", %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP Or %BS_OWNERDRAW, _
          0, 0, 0, 0, hWndMain, %IDOK, hInstance, BYVAL %NULL)
   IF hFont THEN SendMessage hCtl, %WM_SETFONT, hFont, 0


   ' Show the window
   ShowWindow hWndMain, nCmdShow
   UpdateWindow hWndMain

   ' Message handler loop
   LOCAL Msg AS tagMsg
   WHILE GetMessage(Msg, %NULL, 0, 0)
      IF ISFALSE IsDialogMessage(hWndMain, Msg) THEN
         TranslateMessage Msg
         DispatchMessage Msg
      END IF
   WEND

   FUNCTION = msg.wParam

END FUNCTION
' *********************************************************************************************

' *********************************************************************************************
' Main Window procedure
' *********************************************************************************************
FUNCTION WndProc (BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
  Local hOldFnt As Dword, szText As Asciiz * 128
  Local dis As DRAWITEMSTRUCT Ptr, hPen As Dword, hBrush As Dword
  LOCAL rc AS RECT
  local hFont as LONG
  static hIcon As long
  

   SELECT CASE wMsg
      case %WM_CREATE
          hIcon = LoadIcon(ByVal 0, ByVal %IDI_ASTERISK)

      Case %WM_DRAWITEM
           dis = lParam
         if @dis.CtlId = %IDOK then               
           rc = @dis.rcItem
           If (@dis.itemState And %ODS_SELECTED) Then
              DrawGradient(@dis.hDc)
              DrawEdge @dis.hDc, rc, %EDGE_SUNKEN     , %BF_RECT 
              rc.nRight  = rc.nRight -4
              rc.nbottom = rc.nBottom-4 
              rc.nLeft = rc.nLeft - 4 
           Else
              DrawGradient(@dis.hDc)
              DrawEdge @dis.hDc, rc, %EDGE_RAISED    , %BF_RECT      
           End If
            DrawIconEx @Dis.hDc, rc.nLeft+ 30 , rc.nTop + 14 , _                       '
                   hIcon, 16, 16, 0, 0, %DI_NORMAL 
           
           SetBkMode @dis.hDc, %Transparent
           SetTextColor @dis.hDc, rgb(200,255,0)
           SendMessage @dis.hWndItem, %WM_GETTEXT, SizeOf(szText), VarPtr(szText)
           
           hFont = MakeFontEx("Arial", 12, %FW_BOLD , 0, 0)
           IF hFont THEN 
              hFont = SelectObject(@dis.hDC, hFont) 
           end if
           DrawText @dis.hDc, szText, Len(szText), rc, %DT_CENTER Or %DT_VCENTER Or %DT_SINGLELINE
           IF hFont THEN 
              DeleteObject SelectObject(@dis.hDC, hFont)
           end if
           Function = %True
         end if
         
         
         
      CASE %WM_SIZE
         IF wParam <> %SIZE_MINIMIZED THEN
            GetClientRect hWnd, rc
            MoveWindow GetDlgItem(hWNd, %IDOK),  65, 35, 120, 43, %TRUE
         END IF

      CASE %WM_COMMAND
         ' -------------------------------------------------------
         ' Messages from controls and menu items are handled here.
         ' -------------------------------------------------------
         SELECT CASE LOWRD(wParam)

            CASE %IDOK
               IF HIWRD(wParam) = %BN_CLICKED THEN
                 ' SendMessage hWnd, %WM_DESTROY, wParam, lParam
                 ' FUNCTION = 0
               END IF


         END SELECT



      CASE %WM_SYSCOMMAND
         ' Capture this message and send a WM_CLOSE message
         IF (wParam AND &HFFF0) = %SC_CLOSE THEN
            SendMessage hWnd, %WM_CLOSE, wParam, lParam
            EXIT FUNCTION
         END IF



      CASE %WM_DESTROY
         ' ---------------------------------------------------------------------------
         ' Is sent when program ends - a good place to delete any created objects and
         ' store settings in file for next run, etc. Must send PostQuitMessage to end
         ' properly in SDK-style dialogs. The PostQuitMessage function sends a WM_QUIT
         ' message to the program's (thread's) message queue, and then WM_QUIT causes
         ' the GetMessage function to return zero in WINMAIN's message loop.
         ' ---------------------------------------------------------------------------
         PostQuitMessage 0    ' This function closes the main window
         FUNCTION = 0         ' by sending zero to the main message loop
         EXIT FUNCTION

   END SELECT

   FUNCTION = DefWindowProc(hWnd, wMsg, wParam, lParam)

END FUNCTION
' *********************
Steve Miltiadous