Buchempfehlung
MySQL kurz & gut
MySQL kurz & gut
Das preiswerte Taschen- buch stellt MySQL-rele- vante Inhalte systematisch und knapp dar, sodass es sich optimal zum Nach- schlagen beim Pro- grammieren eignet. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Windows GUI

ToolBar, StatusBar Demo

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.MitgliedEternal_Pain 07.04.2012

Quelle: fb@rchive
Autor: Volta

Ein Windowsfenster mit Buttonleiste (mit Standardicons aus Windows)
und Statuszeile (auch mehrfach unterteilt). Alles wird mit API-Funktionen erstellt.
Viel Spass damit wünscht euch Volta

'
' ToolBar
' StatusBar Demo, code by Volta
'
' inspired of toolbar example, code by zydon
'

#include once "windows.bi"
#include once "win/commctrl.bi"

Declare Function WndProc ( ByVal hWnd As HWND, _
                   ByVal uMsg As UINT, _
                   ByVal wParam As WPARAM, _
                   ByVal lParam As LPARAM ) As Integer

 Dim Shared hInstance As HINSTANCE
 Dim wMsg As MSG
 Dim wcls As WNDCLASS
 Dim hWnd As HWND
 Dim appName As String
 'die beiden Handle können auch in der WndProc
 'als static dimensioniert werden
 ' Toolbar object handle
 Dim Shared hTools As HWND
 ' Statusbar object handle
 Dim Shared hStatBar As HWND

 'Instanz-Handle speichern für den Gebrauch in der Anwendung.
 hInstance = GetModuleHandle( null )
 'Fensterklassenstruktur einfügen mit Parametern, die das Hauptfenster beschreiben.
 appName = "ToolStatBar"
 With wcls
  .style         = CS_HREDRAW Or CS_VREDRAW Or CS_DBLCLKS
  .lpfnWndProc   = @WndProc
  .cbClsExtra    = 0
  .cbWndExtra    = 0
  .hInstance     = hInstance
  .hIcon         = LoadIcon( null, IDI_APPLICATION )
  .hCursor       = LoadCursor( null, IDC_ARROW )
  .hbrBackground = CPtr( HGDIOBJ, COLOR_BACKGROUND )
  .lpszMenuName  = null
  .lpszClassName = StrPtr( appName )
 End With

 'Fensterklasse registrieren
 If ( RegisterClass( @wcls ) = false ) Then
     MessageBox( null, "Fehler bei der Registrierung der WindowClass!",_
                appName, MB_ICONERROR )
     End 1
 End If

 'Hauptfenster der Anwendung erzeugen
 hWnd = CreateWindowEx( 0, appName, "StatusBar Demo", _
                      WS_OVERLAPPEDWINDOW Or WS_VISIBLE, _
                      CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, _
                      null, null, hInstance, null )

 'Nachrichten der Anwendung verarbeiten, bis sie geschlossen wird.
 Do Until( GetMessage( @wMsg, null, 0, 0 ) = FALSE )
     TranslateMessage( @wMsg )
     DispatchMessage ( @wMsg )
 Loop
End 0


' Window Procedure Handler
Function WndProc ( ByVal hWnd As HWND, _
                   ByVal uMsg As UINT, _
                   ByVal wParam As WPARAM, _
                   ByVal lParam As LPARAM ) As Integer
 Function = 0
 Dim SBFelder (0 To 3) As Integer
 Dim rc As RECT

 Select Case ( uMsg )
   Case WM_CREATE
     Dim i As integer
     Dim tbBmp(17) As Byte
     Dim tbAddBmp As TBADDBITMAP
     Dim tbb As TBBUTTON
     ' Bitmaps festlegen, alles StandardIcon aus Windows
     tbBmp(0) = STD_FILENEW
     tbBmp(1) = STD_FILEOPEN
     tbBmp(2) = STD_FILESAVE
     tbBmp(3) = -1
     tbBmp(4) = STD_CUT
     tbBmp(5) = STD_COPY
     tbBmp(6) = STD_PASTE
     tbBmp(7) = STD_DELETE
     tbBmp(8) = -1
     tbBmp(9) = STD_FIND
     tbBmp(10) = STD_REPLACE
     tbBmp(11) = -1
     tbBmp(12) = STD_UNDO
     tbBmp(13) = STD_REDOW
     tbBmp(14) = -1
     tbBmp(15) = STD_PRINT
     tbBmp(16) = STD_PROPERTIES

     ' Initialisieren der common controls W32
     InitCommonControls()
     'ToolBar anlegen
     hTools = CreateWindowEx( WS_EX_TOOLWINDOW Or WS_EX_CLIENTEDGE, _
                              TOOLBARCLASSNAME, "", _
                              WS_CHILD Or WS_VISIBLE, _
                              0, 0, 0, 0, _
                              hWnd, null, hInstance, null )
    'Die ToolBar und Buttons zeichnen
    If ( hTools <> NULL ) then
      SendMessage( hTools, TB_BUTTONSTRUCTSIZE, Len( tbb ), NULL )
      tbAddBmp.hInst = HINST_COMMCTRL
      tbAddBmp.nID   = IDB_STD_SMALL_COLOR
      SendMessage( hTools, TB_ADDBITMAP, 0, CInt( @tbAddBmp ) )
      For i = 0 To 16
       With tbb
        If tbBmp(i)= -1 Then
        'an diesen Stellen einen Abstand zwischen die Buttons einfügen
          .fsStyle   = TBSTYLE_SEP
          .iBitmap   = 6 'bestimmt den Abstand der Button
        Else
          .fsStyle   = TBSTYLE_BUTTON
          .iBitmap   = tbBmp(i)
        End If
        .fsState   = TBSTATE_ENABLED
        .idCommand = -1
        .dwData    = 0
       End With
       SendMessage( hTools, TB_ADDBUTTONS, 1, cint( @tbb ) )
      Next
    End If
    'erstellt die Statusbar
    hStatBar = CreateWindowEx(WS_EX_DLGMODALFRAME,_
                             STATUSCLASSNAME, "", _
                             WS_CHILD Or WS_VISIBLE Or WS_BORDER Or SBS_SIZEGRIP,_
                             0, 0, 0, 0, _
                             hWnd, null, hInstance, null )
    'Statusbar anlegen und unterteilen
    If ( hStatBar <> NULL ) Then
      'Statusbar mit mehreren Feldern
      GetClientRect( hWnd, @rc )
      SBFelder (3) = rc.right
      SBFelder (0) = SBFelder (3)\4
      SBFelder (1) = SBFelder (0)*2
      SBFelder (2) = SBFelder (0)*3
      SendMessage (hStatBar, SB_SETPARTS, 4, CInt(@SBFelder(0)) )
      SendMessage (hStatBar, SB_SETTEXT, 0, CInt(@"Statusbar ist hier!") )
      SendMessage (hStatBar, SB_SETTEXT, 1, CInt(@"-=I3I2UI/I0=-") )
      SendMessage (hStatBar, SB_SETTEXT, 2, CInt(@"Feld 3") )
      SendMessage (hStatBar, SB_SETTEXT, 3, CInt(@"Feld 4") )
      'SendMessage (hStatBar, SB_SIMPLE, 0, 0)'nur eine Zeile
    End If

   Case WM_SIZE
    'wird das Fenster in der Größe geändert werden Statusbar und Toolbar angepasst
    SendMessage (hTools,WM_SIZE,0,0)
    SendMessage (hStatBar,WM_SIZE,0,0)
    GetClientRect( hWnd, @rc )
    SBFelder(3) = rc.right
    SBFelder(0) = SBFelder(3) \ 4
    SBFelder(1) = SBFelder(0) * 2
    SBFelder(2) = SBFelder(0) * 3
    SendMessage (hStatBar, SB_SETPARTS, 4, CInt(@SBFelder(0)) )

   Case WM_KEYDOWN
    If( LoByte( wParam ) = 27 ) Then PostMessage( hWnd, WM_CLOSE, 0, 0 )

   Case WM_DESTROY
    PostQuitMessage( 0 )
    Exit Function
 End Select

 Function = DefWindowProc( hWnd, uMsg, wParam, lParam )
End Function

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 13.06.2007 von MitgliedEternal_Pain angelegt.
  • Die aktuellste Version wurde am 07.04.2012 von RedakteurVolta gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen