Code-Beispiel
ToolBar, StatusBar Demo
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Eternal_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 Eternal_Pain angelegt.
- Die aktuellste Version wurde am 07.04.2012 von Volta gespeichert.
|
|