Help Center
Help Center›FreeBASIC›Reference

GFX_NULL

Documentation

    Using the GFX_NULL driver in Windows

    The client area of the window is updated using GfxLib. Menus, toolbars or dialogs can be added to the window using normal Win API calls.

    '' Example of use of the GFX_NULL driver in windows
    
    '' The GfxLib is set up in the ON_Create sub
    
    '' The GFXLib buffer is drawn  to screen in th On_Paint Sub
    
    '' The GfXLib is updated in the event loop
    
    
    
    #include "fbgfx.bi"
    
    #include Once "windows.bi"
    
    
    
    Using fb
    
    
    
    Dim Shared bmi As bitmapv4header
    
    Dim Shared mywin As rect
    
    
    
    ''
    
    ''--------------------------------------------------------------------------
    
    Function on_paint(ByVal hwnd As HWND,ByVal wparam As WPARAM,ByVal lparam As LPARAM) As Integer
    
    
    
        Dim rct As RECT
    
        Dim pnt As PAINTSTRUCT
    
        Dim hDC As HDC
    
    
    
        'draw the gfx buffer to screen
    
        hDC = BeginPaint(hWnd, @pnt)
    
        GetClientRect( hWnd, @rct )
    
        With rct
    
            StretchDIBits hDC, 0, 0,.Right-.Left+1,.bottom-.top+1, 0, 0, .Right-.Left+1,_
    
                .bottom-.top+1,ScreenPtr,CPtr(bitmapinfo Ptr, @bmi), DIB_RGB_COLORS, SRCCOPY
    
        End With
    
    
    
        EndPaint hWnd, @pnt
    
    
    
        Function = 0
    
    
    
    End Function     
    
    
    
    ''
    
    ''---------------------------------------------------------------------------
    
    Function on_Create(ByVal hwnd As HWND,ByVal wparam As WPARAM,ByVal lparam As LPARAM) As Integer
    
        Dim rct As RECT
    
        'set a gfxscreen of the size of the client area
    
        GetClientRect( hWnd, @mywin)
    
        ScreenRes mywin.right+1,mywin.bottom+1, 32, 1, GFX_NULL
    
        'and create a bmp header,required to paint it yo screen
    
        With bmi
    
          .bV4Size = Len(BITMAPV4HEADER)
    
          .bv4width=mywin.right+1
    
          .bv4height=-(mywin.bottom+1)   'negative value=>top to bottom bmp
    
          '(standard BMP's are bottom to top)
    
          .bv4planes=  1
    
          .bv4bitcount=32
    
          .bv4v4compression=0
    
          .bv4sizeimage=mywin.right+1*mywin.bottom+1*4
    
          .bV4RedMask = &h0F00
    
          .bV4GreenMask = &h00F0
    
          .bV4BlueMask = &h000F
    
          .bV4AlphaMask = &hF000
    
        End With
    
    
    
        Function = 0
    
    
    
    End Function
    
    
    
    ''
    
    ''---------------------------------------------------------------------------
    
    Function on_Destroy(ByVal hwnd As HWND,ByVal wparam As WPARAM,ByVal lparam As LPARAM) As Integer
    
        'clear arrays....
    
        PostQuitMessage( 0 )
    
    
    
        Function = 0
    
    
    
    End Function
    
    
    
    ''
    
    ''----------------------------------------------------------------------------
    
    Function WndProc ( ByVal hWnd As HWND,ByVal message As UINT, _
    
                       ByVal wParam As WPARAM,ByVal lParam As LPARAM ) As LRESULT
    
       
    
        Function = 0
    
    
    
        Select Case As Const  message
    
        Case WM_CREATE
    
            Function = On_create(hwnd,wparam,lparam)
    
        Case WM_PAINT
    
            Function = On_paint(hwnd,wparam,lparam)
    
        Case WM_DESTROY
    
            Function = On_destroy(hwnd,wparam,lparam)
    
        Case Else
    
            Function = DefWindowProc( hWnd, message, wParam, lParam )   
    
        End Select
    
    
    
    End Function
    
    
    
    ''
    
    ''------------------------------------------------------------------------------
    
    ''main program create window + event loop
    
    
    
        Dim wMsg As MSG
    
        Dim wcls As WNDCLASS     
    
        Dim szAppName As ZString * 30 => "Random Rectangles"
    
        Dim hWnd As HWND
    
        Dim i As Integer
    
    
    
        With wcls
    
            .style         = CS_HREDRAW Or CS_VREDRAW
    
            .lpfnWndProc   = @WndProc
    
            .cbClsExtra    = 0
    
            .cbWndExtra    = 0
    
            .hInstance     = GetModuleHandle( null )
    
            .hIcon         = LoadIcon( NULL, IDI_APPLICATION )
    
            .hCursor       = LoadCursor( NULL, IDC_ARROW )
    
            .hbrBackground = GetStockObject(WHITE_BRUSH )
    
            .lpszMenuName  = NULL
    
            .lpszClassName = @szAppName
    
        End With
    
    
    
        If( RegisterClass( @wcls ) = False ) Then 
    
            End
    
        End If
    
    
    
        'make a non-resizable screen
    
        hWnd = CreateWindowEx( 0,szAppName,"Example of GFX_NULL",_
    
            WS_OVERLAPPEDWINDOW And Not (WS_sizebox Or ws_maximizebox),_
    
            CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, _
    
            NULL,NULL, wcls.hinstance,NULL )
    
    
    
        ShowWindow( hWnd, SW_NORMAL )
    
        UpdateWindow( hWnd )
    
    
    
        While 1
    
            If PeekMessage( @wMsg, NULL, 0,0, PM_Remove) Then   
    
                If wmsg.message=WM_QUIT Then 
    
                    Exit While
    
                End If
    
                TranslateMessage( @wMsg )
    
                DispatchMessage( @wMsg )
    
            Else
    
                'update the gfx buffer
    
                Line (Rnd*mywin.right,Rnd*mywin.bottom)-(Rnd*mywin.right,Rnd*mywin.bottom),_
    
                RGB(Rnd*255,Rnd*255,Rnd*255),bf
    
                redrawwindow (hwnd,0,0,rdw_invalidate)
    
            End If
    
        Wend
    
    
    
        End wMsg.wparam