fsgn.win32gui

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Lunatix

Betreff: fsgn.win32gui

BeitragDo, Aug 26, 2010 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu!

Ich habe mich nun Entschlossen, mein win32gui Modul online zu stellen. Vor ca... drei? Jahren war mir die MaxGui einfach zu beschränkt, weshalb ich eine eigene win32 (only!) Einbindung geschrieben habe, die auch soweit ganz gut läuft und fast alle funktionen hat.

Die Dokumentation schreibe ich nun einfach mal hier herein, jedoch werde ich sie Stück für Stück erweitern, denn alles auf einmal zu Schreiben wäre schlichtweg zu lang. Natürlich kann man aber im beiliegenden Sourcecode schonmal nach den Fubnktionen schauen - und wenn Fragen aufkommen, beantworte ich diese gern!

Das Modul hat keine Funktionen wie "CreateWindow" oder "CreateButton" - stattdessen müssen direkt die Befehle der Klassen verwendet werden. Die Haupt Gadget Klasse nennt sich "TGadgetObject" (Ausnahme: Menus werden als TMenu bezeichnet, sowie Items eigene Item Strukturen haben - dazu jedoch später mehr)

Wichtiger Edit: Habe das Modul "fsgn.win32" vergessen, beizupacken, welches erforderlich für fsgn.win32gui war. Sorry! Nun ists bei!

Downloads
https://www.blitzforum.de/upload/file.php?id=9384


1.0 - Dateien (die wichtigsten)

src.bmx : beinhaltet TGadgetObject und TGuiDriver - TGadgetObject beinhaltet alle Methoden, die für das jeweilige Gadget wichtig sind, TGuiDriver wird vom System ausgeführt und verwaltet, jedoch kann man hierüber noch DesktopWidth(), DesktopHeight() und ForGroundWindow() ausführen.

src/event.bmx : beinhaltet eine Liste der Events sowie den Typ TFEvent
src/gadgetstyle.bmx : beinhaltet alle Konstanten die für das Aussehen der Gadgets gebraucht werden
src/structs.bmx : beinhaltet alle wichtigen Strukturen
src/textarea.bmx : beinhaltet eine RichEdit 2.0 TextArea, welche wahlweise Multi- oder Singleline ausführung haben kann - mehr dazu steht in "src/gadgetstyle.bmx"


1.1 - Event System (TFEvent)
Funktionsliste:
BlitzMax: [AUSKLAPPEN]
TFEvent.Peek:Int()
Meldet "True", wenn ein neues Event abzurufen ist
BlitzMax: [AUSKLAPPEN]
TFEvent.Wait:TFEvent()
Gibt ein Handle des Types "TFEvent" zurück (wenn ein Event vorliegt) und löscht dies aus der Warteschlange
Erfahrene Programmierer können sich noch weitere Funktionen in "src/event.bmx" ansehen, ich empfehle jedoch nicht unbedingt, diese unbedacht zu verwenden. Es können dort noch eigene Events hinzugefügt werden oder auch events gelöscht werden.

Struktur TFEvent:
Code: [AUSKLAPPEN]
Field id:Int
Event typ - siehe dazu 1.2 - Event Liste (z.b. MSG_CLOSE, MSG_MENUACTION, MSG_BUTTONPUSH)
Code: [AUSKLAPPEN]
Field source:Object
Quelle des Events (z.b. ein Fenster oder Button)
Code: [AUSKLAPPEN]
Field sourcetype:Int
Typ der Quelle (z.b. GADGET_WINDOW, GADGET_BUTTON, etc.)
Code: [AUSKLAPPEN]
Field data:Object 
Optionale Daten, z.b. eine Menu Item Struktur
Code: [AUSKLAPPEN]
Field extra:Object
Optionale Daten

1.1 - Event Listung
Folgende Konstanten können überevent.sourcetype übermittelt werden:
GADGET_WINDOW /color
[color=red]GADGET_BUTTON

GADGET_LISTVIEW
GADGET_TREEVIEW
GADGET_TABBER
GADGET_TEXTFIELD
GADGET_TEXTAREA
GADGET_PANEL
GADGET_MENU
GADGET_LABEL
GADGET_TOOLBAR
GADGET_COMBOBOX
GADGET_SCROLLBAR
GADGET_TRACKBAR
GADGET_FILEBROWSER
GADGET_OWNER_BUTTON


Folgende Konstanten können überevent.id übermittelt werden:
EVENT_WINDOWCLOSE - Schliessen-Button wurde gedrückt
EVENT_WINDOWSIZE - Fenster wird verändert (Größe)]/b]

[b]WM_DROPFILE
- Dateien wurden per Drag&Drop auf das jeweilige Fenster geschoben

MSG_CLOSE - Schliessen Button wurde betätigt
MSG_SIZE - Fenstergröße wurde geändert
MSG_MOVE - Fenster wurde bewegt
MSG_MOVING - Fenster wird bewegt
MSG_FILEDROP - Dateien wurden per Drag&Drop auf das jeweilige Fenster geschoben

MSG_ITEMSELECT - Ein Item wurde angewählt (Treeview, Listview, ComboBox, Toolbar)
MSG_LOSTFOCUS - Benutzer hat ein anderes Fenster ausgewählt
MSG_ITEMMENU -
MSG_DBLCLICK - Doppelter Mausklick
MSG_RETURN - Return taste betätigt
MSG_GETFOCUS - Benutzer hat Fenster ausgewählt
MSG_ITEMCHANGE - Item wurde gewechselt
MSG_ITEMEXPAND - Benutzer hat ein TreeViewItem ausgeklappt
MSG_ITEMEXPANDING - Item klappt aus
MSG_ITEMUNSELECT - Item wurde abgewählt
MSG_CLICK - Linke Maustaste betätigt
MSG_RCLICK - Rechte Maustaste betätigt
MSG_ITEMEDIT - Benutzer editiert Treeview Item
MSG_RDBLCLICK - REchte Maustaste doppelt betätigt
MSG_BUTTONCLICKED -
MSG_KEYDOWN - taste gedrückt
MSG_KEYUP - Taste losgelassen
MSG_MOUSEMOVE - Maus wird bewegt
MSG_LMOUSEDOWN - Linke Maustaste gedrückt
MSG_LMOUSEUP - Linke Maustaste losgelassen
MSG_LMOUSEDBL - Linke Maustaste Doppelklick
MSG_RMOUSEDOWN - Rechte Maustaste wird gedrückt
MSG_RMOUSEUP - Rechte Maustaste losgelassen
MSG_RMOUSEDBL - Rechte Maustaste Doppelklick
MSG_LINK -
MSG_TEXTSELECT -
MSG_SCROLLINFO - Benutzer hat über eine Track- oder Scrollbar gescrollt

MSG_BUTTONPUSH - Button wurde betätigt
MSG_BUTTONSTATE - Status einer Checkbox wurde verändert

MSG_MENUACTION - Ein Menu eines Fenster- oder PopUp Menus wurde ausgewählt

2.1 - TWindow
BlitzMax: [AUSKLAPPEN]
Local hWnd:TGadgetObject = TWindow.Create:TGadgetObject( hWndTitle:String, xpos:Int, ypos:Int, hWndWidth:Int, hWndHeight:Int, hWndParent:TGadgetObject, hWndStyle:Int, hWndMenu:TMenu = Null )

hWndTitle: Text, der in der Titelleiste, bzw. beim Hauptfenster in der Taskleiste erscheint
xpos, ypos: X und Y Position des Fensters, ausgehend vom Bildschirm oben links
hWndWidth, hWndHeight: Höhe und Breite des Fensters
hWndParent: Soll das neue Fenster einem schon bestehenden "angehängt" werden, muss dieses hier angegeben werden - ansonsten einfach "NULL"
hWndStyle: Aussehen des Fensters:

Arrow WND_TITLEBAR - Titelleiste
Arrow WND_TOOL - kleine Titelleiste
Arrow WND_HIDDEN - Versteckt erstellen
Arrow WND_CLIP -
Arrow WND_OVERLAPPED -
Arrow WND_CHILD -
Arrow WND_MDICHILD - Fenster im Parent erstellen
Arrow WND_HSCROLL - Horizontale Scrollbar
Arrow WND_VSCROLL - Vertikale Scrollbar
Arrow WND_SCROLL - Horizontal und Vertikal kombiniert
Arrow WND_ACCEPTFILES - Dateien per Drag&Drop akzeptieren
Arrow WND_RESIZE - Fenstergrösse vom Benutzer änderbar
Arrow WND_MINIMIZE - Fenster kann minimiert werden
Arrow WND_CLOSEBUTTON Fenster hat einen Schliessknopf
Arrow WND_BORDER - Fenster hat einen Rahmen
Arrow WND_FRAME -

hWndMenu: ein vorher erstelltes Menu (Rootmenu, hinterher indiviuell erweiterbar) Weitere informationen im Punkt 2.1 - TMenu

[/i] 2.1 - TMenu[/i]
BlitzMax: [AUSKLAPPEN]
Local hMenu:TMenu = TMenu.Create(Name:String, source:TMenu = Null)

Name: Menutext
source Parent des Menus (Das Rootmenu bekommt natürlich keinen parent)

Ein Menu kann entweder an ein Fenster angehangen werden oder aber auch als PopUp Menu per rechter Maustaste Aktiviert werden.

Nachdem das Menu erstellt wurde, muss unbedingt die Methode (nur Rootmenu)
Code: [AUSKLAPPEN]
hRootMenu.Update()
ausgeführt werden. Nachdem ein Fester erstellt wurde, welches das Menu angehangen bekommen hat, muss die Methode
Code: [AUSKLAPPEN]
hWnd.RedrawMenu
ausgeführt werden.

Soll das Menu als PopUp Menu fungieren, muss beispielsweise nach dem das Event (siehe Punkt X.1 - Event System) MSG_CLICK / MSG_RCLICK / MSG_LMOUSEDOWN / MSG_RMOUSEDOWN / MSG_RMOUSEUP / MSG_LMOUSEUP abgefangen wurde (oder jedes andere beliebige Event - das ist natürlich dem Programmierer überlassen) die MethodeCode: [AUSKLAPPEN]
hWnd.PopUpMenu
ausgeführt werden.

BlitzMax: [AUSKLAPPEN]
TGadgetObject.PopUpMenu:Int(menu:TMenu,pt:Int[]=Null,align:Int=TPM_LEFTALIGN|TPM_TOPALIGN)


menu:[b] Übergabe des vorher erstellten Menus
[b]pt:
Zweistelliges Array mit der X und Y Position des Fensters - ist der Pararmeter "NULL" werden automatisch die aktuellen Koordinaten des Mauszeigers benutzt.
align: Ausrichtung des Menus:

Arrow TPM_TOPALIGN - Ausrichtung von Oben
Arrow TPM_LEFTALIGN - Ausrichtung nach Links
Arrow TPM_RIGHTALIGN - Ausrichtung nach Rechts
Arrow Noch unvollstänige Doku - für mehr in der Datei "src/windowstyle.bmx" schauen oder die msdn befragen: http://msdn.microsoft.com/de-d...80%29.aspx

Zum Schluss nun noch ein simples Beispiel:

BlitzMax: [AUSKLAPPEN]
SuperStrict
Framework fsgn.win32gui
Import brl.linkedlist
Import brl.standardio
Import brl.linkedlist
Import brl.timer
Import brl.stream
Import brl.timer
Import brl.system


Local hWnd:TGadgetObject = TWindow.Create("Simple Window", 60, 60, 300, 150, Null, WND_TITLEBAR | WND_CLOSEBUTTON)
Local hButton:TGadgetObject = TButton.Create("Close me!", 115, 40, 70, 25, hWnd, BUTTON_PUSH)
Local timer:TTimer = TTimer.Create(60)

While (True)

If TFEvent.Peek()
Local event:TFEvent = TFEvent.wait()

Select event.id

Case MSG_CLOSE

Select TGadgetObject(event.source)

Case hWnd

End
End Select

Case MSG_BUTTONPUSH

Select TGadgetObject(event.source)

Case hButton

End

End Select

End Select

EndIf

timer.wait()

Wend

[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group