Th69 - 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:
http://www.functionx.com/win32/Lesson01c.htm
Die wichtigen Code-Zeilen daraus sind:
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
http://wiki.winehq.org/List_Of_Windows_Messages
Die Bedeutung der einzelnen Messages sind dann wiederum in der
Windows Development Reference [
http://msdn.microsoft.com/en-us/library/windows/desktop/hh447209%28v=vs.85%29.aspx] bei den einzelnen Bereichen erklärt, z.B. die eigentlichen Windows-Messages unter
Window Reference [
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632595%28v=vs.85%29.aspx] ("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 [
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.wndproc.aspx] 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? [
http://www.mycsharp.de/wbb2/thread.php?threadid=27992] erklärt).
Ich hoffe, ich konnte dir damit einen Überblick verschaffen. Du darfst aber gerne noch weitere Detail-Fragen stellen ;-)