Tutorial
Erste Schritte in der WinAPI mit Freebasic und FBEdit
von stephanbrunker | Seite 6 von 13 |
Messageboxes
Messageboxes lassen sich ganz einfach aufrufen:
MessageBox(hWin,"Nachricht im Fenster","Titel",MB_OK + MB_ICONERROR)
MessageBox in der MSDN
Man übergibt der Funktion den Handle zum MainWindow, den gewünschten Text und Titel und die Optionen, mit denen man das Layout steuern kann. Das Programm wartet dann auf die Usereingabe und gibt einen entsprechenden Returnwert als Integer zurück, wie und was genau muss man in der MSDN nachlesen ... falls ich es nicht schon erwähnt habe. Man kann die Funktion natürlich auch in einer IF- oder Select Case Abfrage ausführen:
If FileExists(dateipfad) Then
Select Case MessageBox(hWin,_
filetitle & ".ass ist bereits vorhanden" & Chr(13,10) & "Möchten Sie sie ersetzen?",_
"Speichern unter bestätigen",_
MB_YESNO + MB_DEFBUTTON2 + MB_ICONWARNING)
Case IDYES 'oder 6
Kill dateipfad
Case IDNO 'oder 7
dateipfad = ""
End Select
EndIf
Das wäre so die klassische Datei-überschreiben-Messagebox, die der Explorer auch verwendet:
Tooltips
Das nächste Thema ist dann schon etwas komplexer: Die hilfreichen Tooltips, die dem User eine Direkthilfe geben wenn er über einem Schaltelement mit der Maus verweilt.
In dem Fall brauchen wir auch unsere erste Helperfunction, die wir entweder deklarieren müssen oder einfacherweise vor die DlgProc ins Programm schreiben:
Function CreateToolTip(hDlg As HWND, toolID As Integer, pszText As PTSTR) As HWND
Dim As HWND hwndTool, hwndTip
hwndTool = GetDlgItem(hDlg, toolID)
hwndTip = CreateWindowEx(NULL, _
TOOLTIPS_CLASS, _
NULL, _
WS_POPUP Or TTS_ALWAYSTIP,_ 'OR TTS_BALLOON für Sprechblase über Control
CW_USEDEFAULT,_
CW_USEDEFAULT,_
CW_USEDEFAULT,_
CW_USEDEFAULT,_
hDlg,_
NULL,_
hInstance,_
NULL)
SendMessage(hWndTip,TTM_SETMAXTIPWIDTH,NULL,150) 'Enables Multi-Line Tooltips, last Argument is width
Dim toolInfo As TOOLINFO
With toolInfo
.cbsize = SizeOf(toolInfo)
.hwnd = hDlg
.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
.uId = Cast(UINT_PTR,hwndTool)
.lpszText = pszText
End With
SendMessage(hwndTip,TTM_ADDTOOL,0,Cast(Lparam,@toolInfo))
Return hwndTip
End Function
Die Funktion erstellt zu einem bestimmten Schaltelement (die wir ja in der Dialog.bi definiert haben) einen Tooltip. Weil dieser im Prinzip ja auch nur ein Window ist, die CreateWindowEx - Funktion. Es gibt zwei Sorten der Tooltips: die quadratischen unter der Maus, und die Sprechblasen über dem Cursor, die mit einem zusätzlichen OR TTS_BALLOON gesteuert werden. Zu den Styles noch eine Anmerkung: Windows speichert hier jede Menge Varianten in einer INTEGER-Variable, und zwar abhängig davon, welches Bit gesetzt ist. Wenn wir also mehrere Varianten haben möchten, dann können wir die einzelnen Werte einfach mit OR kombinieren. Hier begegnet uns auch die erste Struktur, in dem Fall TOOLINFO, wie unschwer zu erkennen ist ein UDT, in dem die notwendigen Informationen für die TTM_ADDTOOL Message gespeichert werden. Die Werte gibt man am elegantesten und im Code übersichtlichsten mit WITH ein. Manche Strukturen verlangen auch nach ihrer Größe, die man mit SizeOf() erfragen kann.
Dann müssen wir die Tooltips natürlich noch erzeugen, das geht am besten im WM_INITDIALOG - Abschnitt der DlgProc. Für jedes Element müssen wir die CreateToolTip - Funktion dann aufrufen und den gewünschten Text eingeben:
CreateToolTip(hWin, IDC_BTN1, @"Das ist ein Button")
CreateToolTip(hWin,IDC_EDT1, @("Editbox" & Chr(13,10) & "Text hier eingeben") )
'same Result: CreateToolTip(hWin,IDC_EDT1, @(!"Editbox \r\n Text hier eingeben") )
...
Ich habe den Code direkt mal um die Möglichkeit mehrzeiliger Tooltips ergänzt, das ist die TTM_SETMAXTIPWIDTH Message, deren LPARAM die Breite des Tooltips vorgibt. Den Umbruch erzeugt man dann mit Chr(13,10) oder man aktiviert die Escapezeichen mit dem !- Operator und \r\n .
So sollte es dann aussehen:
Der lauffähige Code in der gleichen Datei wie vorher: Tutorial4.zip
Weiter geht es mit den Aufklappfeldern, den Comboboxen ...
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|
|