PBCC 6 Gui Example


'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
'Test using a resource dialog with a class name as an sdk window
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
#COMPILE EXE
#CONSOLE OFF
#DIM ALL
#INCLUDE ONCE "Windows.Inc"
#INCLUDE ONCE "PbLib610.Bas"
#RESOURCE RES, "RcDlgClass2.res"
'==============================================================================
%IDD_DLG1 = 1000
%IDC_BTN1 = 1001
'==============================================================================
Function WinMain (Byval hInstance     As LONG, _
                  Byval hPrevInstance As LONG, _
                  Byval lpCmdLine     As STRINGZ PTR, _
                  Byval iCmdShow      As LONG) AS LONG

    Local Msg         As TAGMSG
    Local hWnd        As LONG
    Local hBkBrush    As LONG

    hBkBrush = CreateSolidBrush(GetSysColor(%COLOR_BTNFACE))
    hWnd = CreateMainWindow(hInstance,%IDD_DLG1,hBkBrush)
    If hWnd = 0 Then
        Exit Function
    End If

    ShowWindow hWnd,%SW_SHOW
    While GetMessage(Msg, Byval %NULL, 0, 0)
        hWnd = GetFormHandle(GetFocus())
        If (hWnd = %NULL) OR (IsDialogMessage(hWnd, Msg) = 0) Then
            TranslateMessage Msg
            DispatchMessage Msg
        End If
    Wend

    If hBkBrush Then
        DeleteObject hBkBrush
    End If

    Function = Msg.wParam
End Function
'==============================================================================
Function CreateMainWindow (Byval hInstance As LONG , _
                           Byval DlgId As LONG , _
						   Byval hBkBrush As LONG) As Long

    Local szClassName    As ASCIIZ * 80
    Local wce            As WNDCLASSEX
    Local hWnd           As LONG

    If IsFalse(hBkBrush) Then
        hBkBrush = GetStockObject(%WHITE_BRUSH)
    End If

    szClassName       = "JcfMainWin"
    wce.cbSize        = SizeOf(wce)
    wce.style         = %CS_HREDRAW Or %CS_VREDRAW
    wce.cbWndExtra    = %DLGWINDOWEXTRA
    wce.lpfnWndProc   = CodePtr(MainWndProc)
    wce.hInstance     = hInstance
    wce.hIcon         = LoadIcon( hInstance, Byval(%IDI_WINLOGO))
    wce.hCursor       = LoadCursor(%NULL, Byval %IDC_ARROW)
    wce.hbrBackground = hBkBrush
    wce.lpszClassName = VarPtr(szClassName)
    wce.hIconSm       = LoadIcon(hInstance, Byval %IDI_APPLICATION)

    If RegisterClassEx(wce) = 0 Then
        MessageBox(GetActiveWindow(),"RegisterClassEx Error","Registration Error",%MB_OK)
        Function = 0
    End If

    hWnd = CreateDialogParam(hInstance,Byval MAKEINTRESOURCE(DlgId),0,0,0)

    If hWnd = 0 Then
        MessageBox(GetActiveWindow(),"CreateDialogParam Failed","Creation Error",%MB_OK)
    End If

    Function = hWnd
End Function
'==============================================================================
WinCallback(MainWndProc)
    Select Case CB_MSG
        Case %WM_CLOSE
            DestroyWindow(CB_HWND)
        Case %WM_DESTROY
            PostQuitMessage 0
        Case %WM_COMMAND
            If (CB_CTLMSG  = %BN_CLICKED) And ( CB_CTL = %IDC_BTN1) Then
                PostMessage CB_HWND,%WM_CLOSE,0,0
            End If
    End Select
EndWinCallback
'==============================================================================

A PowerBASIC Console Compiler example using a resource dialog to create a main SDK style Window.





#5: hide the console
#6: ALWAYS use Dim All
#7: Jose Includes
#8: My Pb library
#9: link in the res dialog

#11-12: Dialog and control res id's


#14-43: Your standard WinMain Procedure



#19-21 Dimension Local variables


#23: Create a background brush for the main window
#24: Create the Window and return its handle. If it fails with a zero, get otta here


#29: Display the Window

#30-36: Your Standard Windows Message Loop. The GetFormHandle function is located in PbLib610.Bas





#39: Destroy what we create!





#45-81: The CreateMainWindow function.


#49-51 Dim local variables



#53-55: If we don't have a back ground brush passed to the function; create one

#57: Use this class name in your resource DIALOGEX script

#60: DO NOT FORGET THIS LINE ->
#61: Tell Windows where our callback function is located






#69: Register the class and exit if it fails


#74: Create our Main Window. Make sure parameter(4) is zero. This works because windows will use the callback value placed in the WNDCLASSEX structure.


#80: return the handle or zero if the creation failed.

#83-94 The callback procedure for the Main Window. WinCallback, EndWinCallback, and the CB_ items are PbLib610.bas MACROs