Autor Beitrag
Felix2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Fr 03.02.12 10:23 
Hi Folks !

Ich habe mal eine Frage an euch. Es geht um das Thema Benutzeroberflächen. Ich komme bisher von der Java-Schiene und möchte mal wissen, ob ich mit meiner Vermutung richtig liege.

Wenn ich in MS Access bspw. eine Oberfläche gestalte und auf der Oberfläche mittels Drag & Drop Buttons oder andere GUI Elemente platziere, werden diese Objekte dann implizit in einer Liste bzw. einem Containerobjekt der Oberfläche (bei Access ist das einfach ein Formular) organisiert?

Lauscht eine solche Benutzeroberfläche eigentlich immer auf bestimmte Ereignisse hin bzw. wartet auf bestimmte Ereignisse, die irgendwann mal eintreten können? Was ich weiß ist, dass jedes Gui Element bestimmte Eigenschaften und Ereignisse besitzt (z.B. das Clickereignis der Klasse Button) und das eben bei einem Klick auf den Button ausgeführt wird.

Gibt es so etwas wie wartende Prozesse einer Benutzeroberfläche?

Greetz
Felix
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 03.02.12 11:01 
Hallo Felix,

da Windows intern auf der WinAPI beruht (und diese in C bzw. C++ implementiert ist), kann ich es dir am besten anhand eines einfachen WinAPI-Tutorials zeigen: www.functionx.com/win32/Lesson01c.htm

Die wichtigen Code-Zeilen daraus sind:
ausblenden Quelltext
1:
2:
3:
4:
5:
while( GetMessage(&Msg, NULL, 0, 0) )
{
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
}

Die ist die sog. "Message Loop", welche auf Windows Botschaften lauscht und diese dann entsprechend verarbeitet.
Die einzelnen Botschaften (z.B. WM_CLICK, WM_CLOSE, WM_PAINT, etc.) werden dann in der "WndProc" verarbeitet (welche vorher registriert werden muß).
Eine Liste der festdefinierten Windows Messages (WM) findest du z.B. unter wiki.winehq.org/List_Of_Windows_Messages
Die Bedeutung der einzelnen Messages sind dann wiederum in der Windows Development Reference bei den einzelnen Bereichen erklärt, z.B. die eigentlichen Windows-Messages unter Window Reference ("Window Notifications"). Desweiteren gibt es dann je nach Control noch eigene Messages (z.B. BT_XXX, für Buttons, CB_XXX für ComboBoxen etc.).

Unter C# (bzw. .NET) ist die WinForms Message-Loop in der Application.Run()-Methode implementiert und jedes Control bzw. Form hat eine virtuelle WndProc Methode, so daß man diese dann für eigene Messages erweitern (bzw. vorhandene Messages abfangen und anders behandeln) kann.

Daher darf man auch niemals im GUI-Thread längere Operationen ausführen, da man damit die GUI (und somit die "Message Loop") blockiert (wie z.B. unter [FAQ] Warum blockiert mein GUI? erklärt).

Ich hoffe, ich konnte dir damit einen Überblick verschaffen. Du darfst aber gerne noch weitere Detail-Fragen stellen ;-)