Praesentation WinApi
-
Hallo,
fuer mein Studium der Elektrotechnik (Studienrichtung: Technische Informatik) muss ich eine kleine Einfuehrung bzw. Praesentation im Rahmen eines Seminars halten. Die Dauer des Vortrages ist ungefaehr 30min mit anschließender Diskussion.
Koenntet Ihr euch diese Praesentation evtl mal anschauen und sagen ob es Inhaltlich, stilistisch etc. gut/ schlecht ist?
http://projekte.escapete.de/Praesentation_WinApi.pdf
Dankeschoen!
-
Win9x ist aber ned 16bit, win3.1 vielleicht...
-
Auf Seite 8 das hPrevInstance is voll veraltet, das ist ned mehr handle zu bereits gestarteten instanz das war nur bis win3.1 so, hPrevInstance ist heute immer NULL.
-
Eine Taste wurde niedergedrückt hört sich bissel brutal an!
-
Folie4:
- Die API ist die allgemeine Schnittstelle zum OS und hat mit Fenstern nur Sekundär zu tun... die Fenster-Programmierung ist nur ein kleiner Teil der WinAPI!
- Eine unterscheidung findet nicht statt... (oder was meinst Du damit?)Folie5:
- Online-Hilfe in Visual StudioFolie6:
- Ein Handle ist kein Zeiger sondern nur ein Verweis in einer Handle-Table...Folie7:
- Multitasking-Systeme können nicht mehrere Programme gleichzeitig ausführen sondern mehrere Tasks besser gesagt Threads!
- Du meinst vermutlich hier die Instanz eines Prozesses, oder? Wobei die PID nur eindeutig ist, solange der Prozess auch tatsächlich läuft. Eineindeutig ist nur ein Handle auf einen ProzessFolie9:
- Was für Dinge willst Du da "installieren"?Folie10:
- Es wird nicht ständig irgendwas "abgefragt" (das wäre ja polling) sondern es wird gewartet bis ein ereignis eintritt!
- Was willst Du mit "Eingebanachricht, sofern gültig"... sagen!?Folie11:
- Es gibt vom prinzip her keine unterschiedlichen Nachrichten-Gruppen... nur vielleicht aus logischer Sicht. Es gibt aber besondere Nachrichten (z.B. WM_COPYDATA)Folie12:
- Ich würde "Hole Nachricht" durch "Warte auf Nachricht" ersetzen
- Ich würde "Leite Nachricht weiter" durch "Bearbeite Nachricht" ersetzenFolie 13:
- Es gibt auch Nachrichten-Schleifen die kein Fenster haben (siehe PostThreadMessage)!Folie 20:
- Was für eine Unterscheidung meinst Du da immer!?
-
Jochen Kalmbach schrieb:
Folie4:
- Die API ist die allgemeine Schnittstelle zum OS und hat mit Fenstern nur Sekundär zu tun... die Fenster-Programmierung ist nur ein kleiner Teil der WinAPI!
- Eine unterscheidung findet nicht statt... (oder was meinst Du damit?)Ok, hast gewonnen und recht

Jochen Kalmbach schrieb:
Folie5:
- Online-Hilfe in Visual StudioDanke
Jochen Kalmbach schrieb:
Folie6:
- Ein Handle ist kein Zeiger sondern nur ein Verweis in einer Handle-Table...Auf vielen Seiten, ja selbst in Buechern steht oft Zeiger. Dementsprechend bin ich davon ausgegangen. Oder hast du eine gute Definition fuer ein Handle?
Beispielsweise: http://de.wikipedia.org/wiki/HandleJochen Kalmbach schrieb:
Folie7:
- Multitasking-Systeme können nicht mehrere Programme gleichzeitig ausführen sondern mehrere Tasks besser gesagt Threads!
- Du meinst vermutlich hier die Instanz eines Prozesses, oder? Wobei die PID nur eindeutig ist, solange der Prozess auch tatsächlich läuft. Eineindeutig ist nur ein Handle auf einen ProzessIch sprach von "quasi geleichzeitig" nicht von "gleichzeitig". Das mehrere Programme laufen nur auf Mehr-Prozessor-Systemen laufen, dass ist mir schon klar.
Jochen Kalmbach schrieb:
Folie9:
- Was für Dinge willst Du da "installieren"?Es muss das Programm in den Cache geladen werden, sofern es das erste mal aufgerufen wird.
Jochen Kalmbach schrieb:
Folie10:
- Es wird nicht ständig irgendwas "abgefragt" (das wäre ja polling) sondern es wird gewartet bis ein ereignis eintritt!
- Was willst Du mit "Eingebanachricht, sofern gültig"... sagen!?Gut, hab nu hingeschrieben, dass auf ein Ereigniss gewartet wird...
Jochen Kalmbach schrieb:
Folie11:
- Es gibt vom prinzip her keine unterschiedlichen Nachrichten-Gruppen... nur vielleicht aus logischer Sicht. Es gibt aber besondere Nachrichten (z.B. WM_COPYDATA)Ich persoehnlich wuerde schon in den Nachrichten unterscheiden, ob es sich um eine Tastatur, Maus, Menue, etc. handelt. Darueber laesst sich aber sicherlich ausgiebig streiten.
Jochen Kalmbach schrieb:
Folie12:
- Ich würde "Hole Nachricht" durch "Warte auf Nachricht" ersetzen
- Ich würde "Leite Nachricht weiter" durch "Bearbeite Nachricht" ersetzenJochen Kalmbach schrieb:
Folie 13:
- Es gibt auch Nachrichten-Schleifen die kein Fenster haben (siehe PostThreadMessage)!Es handelt sich ja bei meinem Thema um GUI Programmierung. Daher bezieh ich das nur auf Fenster. Oder ich versteh dich nicht

Jochen Kalmbach schrieb:
Folie 20:
- Was für eine Unterscheidung meinst Du da immer!?Es gibt doch eine Win16 API und eine Win32 API. Ich bezieh mich nur auf die Win32 API.
-
escapete schrieb:
Hmm...
Naja, man kann es so interpretieren, das sind dann aber interne Infos...escapete schrieb:
Ich sprach von "quasi geleichzeitig" nicht von "gleichzeitig". Das mehrere Programme laufen nur auf Mehr-Prozessor-Systemen laufen, dass ist mir schon klar.
Mir ging es nicht um "gleichzeitig", sondern um "Programm"! Windows führt keine "Programme" gleichzeitig aus, sondern "Threads"!!!
escapete schrieb:
Es muss das Programm in den Cache geladen werden, sofern es das erste mal aufgerufen wird.
???? Was muss beim ersten Mal in den "Cache" geladen werden? In was für ein "Cache"?
escapete schrieb:
Es gibt doch eine Win16 API und eine Win32 API. Ich bezieh mich nur auf die Win32 API.
Die Win16 API ist genau die gleiche wie die Win32-API; aus diesem Grunde verstehe ich nicht ganz was Du damit meinst...
-
Ich sage ja nicht, dass Wikipedia recht hat. Aber irgendwoher muss ich ja meine Information beziehen.
Bzgl der Threads: Ja, ich versteh dich da.
Zum "Cache": Vor der erstmaligen Ausfuehrung wird doch ein Programm bei einem Cache-Miss in den Cache geladen. Von daher meinte ich Cache. Von daher war vielleicht die Wortwahl "installieren aller Instanzen" etwas ungluecklich gewaehlt..
Danke fuers drueberlesen! Ist denn soweit die Aufmachung und rest denn dann in Ordnung?
-
escapete schrieb:
Bzgl der Threads: Ja, ich versteh dich da.
Hmmm... wie soll ich das erklären... Windows führt keine Programme gleichzeitig aus, sondern Threads... ein Programm kann z.B. mehrere Threads haben.
Wenn z.B. das Programm A 9 Threads hat und das Programm B nur 1, so werden insgesamt 10 Threads ausgeführt. Und ganz grib gesagt, bekommt dann Programm A 9/10 der Rechenzeit und Programm B nur 1/10 (wenn alle Threads immer was tun wollen; was man ja bei Ereignisorientiertem Programmieren verhindern will).escapete schrieb:
Zum "Cache": Vor der erstmaligen Ausfuehrung wird doch ein Programm bei einem Cache-Miss in den Cache geladen. Von daher meinte ich Cache. Von daher war vielleicht die Wortwahl "installieren aller Instanzen" etwas ungluecklich gewaehlt..
Du meinst vermutlich "Page-Fault"... ein "Chach-Miss kenn ich nur von Prozessor bzw. dem File-Cache (der hat aber direkt nix mit Programmen zu tun).
-
Jochen Kalmbach schrieb:
escapete schrieb:
Bzgl der Threads: Ja, ich versteh dich da.
Hmmm... wie soll ich das erklären... Windows führt keine Programme gleichzeitig aus, sondern Threads... ein Programm kann z.B. mehrere Threads haben.
Wenn z.B. das Programm A 9 Threads hat und das Programm B nur 1, so werden insgesamt 10 Threads ausgeführt. Und ganz grib gesagt, bekommt dann Programm A 9/10 der Rechenzeit und Programm B nur 1/10 (wenn alle Threads immer was tun wollen; was man ja bei Ereignisorientiertem Programmieren verhindern will).Du scheinst nicht richtig gelesen zu haben. Da steht nicht das er dich nicht versteht, sondern das er dich versteht.
Mfg Ominion
-
Ominion schrieb:
Du scheinst nicht richtig gelesen zu haben. Da steht nicht das er dich nicht versteht, sondern das er dich versteht.
Hmmm... wenn ich es mir genau durchlesen, muss ich Dir recht geben

-
"Die Funktion WinMain" sollte man eher wenn man es mit der IHK zu tun hat in "Die Prozedur WinMain" umtaufen, denn ich habe bemerkt die Unterscheiden zwischen Funktionen und Prozeduren sehr penibel.
Dazu solltest Du nicht mit PSTR und co um dich werfen, sondern schon hinschreiben: "char *". Da Du sonst sehr schnell in die gefahr läufst und denen erklären musst was PSTR ist. (Viele kennen nur die Grundbasistypen)
Auch deshalb solltest du das APIENTRY solltest Du in __stdcall umtaufen. Bei meiner Präsentation wurde mir WINAPI regelrecht zum verhängnis, da die dann immer mehr fragen wie z. B. "Ja warum wurde das denn so gemacht usw." So kannst Du Dir das ersparen und verlierst bei einem Vortrag keine wertvolle Zeit.
Bei initialisieren der Fensterklasse, geh erst mit einem ZeroMemory dran und dann mach die einzelnen Parameter die nicht 0 sind in deiner Auflistung auf Folie 25. So ersparst Du Dir viel Platz und es sieht nicht mehr so "wuchtig" aus. Zu viel Text ist böse und nervt die Zuhörer, da sie sehr viel lesen usw.
Auch WM_USEDEFAULT bei der Positionierung, lass das bitte weg! Da kommen wieder nur "sinnlose" Fragen auf: "Wie sucht windows sich denn dann eine Position aus? Erklären Sie das mal genauer." Da gehts wieder los.
Folie 17: Vergiss das mit dem > 0, bringt nur wieder Fragen auf die nichts bringen. Wenn die GetMessage 0 zurück gibt ist sowieso ende, alles andere bedeutet: Move Baby

Folie 18: LRESULT, CALLBACK, WPARAM uvm. schreib dort die Datentypen aus, wie schon gesagt: Bringt atens viele zeitraubende Fragen auf und btens siehts etwas "Professioneller" und "Klarer" aus, das mögen die Hoschis gerne die da sitzen, wenn sie Direkt alles kapieren und nicht umdenken mussen alá "ah LRESULT ist also ein long".
Daher immer den Merksatz halten: Zeit ist Geld und je mehr Du von Zeit einsparen kannst, desto mehr Geld hast Du nachher

Die Sache mit der Klarheit ist z. B. bei der IHK Prüfung bei einem Kollegen bald zum Verhängnis geworden. Er hat fast die hälfte der Zeit damit zugebracht die Datentypen zu erklären, da die Hoschis nur Standarddatentypen kannten bzw. sich blöde gestellt haben (weil er in ihre Falle getreten ist).
Pass da ja auf. Schreibs Klar und nicht mit fremden typedefs. Da kannste auch den normalen Datentyp hinschreiben und läufst nicht in deren Fallen.
- Patrick
-
Datentyp Bedeutung
--------------------------------
BOOL - boolscher Wert (32 Bit)
BYTE - vorzeichenloser 8-Bit-Wert
COLORREF - Farbinformationen (32 Bit)
DWORD - wie unsigned int in C (32 Bit)
LONG - wie int in C (32 Bit)
LPARAM - Funktionsparameter (32 Bit)
LPCSTR - Zeiger auf konstanten String
LPSTR - Zeiger auf Sring
LRESULT - Rückgabewert von Funktionen (32 Bit)
UINT - unsigned int
WNDPROC - Zeiger auf eine Windowsfunktion
WORD - unsigned short
WPARAM - Funktionsparameter (16 Bit)(c) http://pronix.linuxdelta.de/C/win32/win32_1.shtml#4
Kann ich mich dann auf die beziehen?
-
escapete
Dafür das LONG schonmal nicht "das selbe wie int" ist, würde ich sagen: Nein.Schreibe es klar und deutlich hin, so ersparst Du Dir Arbeit und Fragen und musst Dich nicht auf jeden Kram zurückbeziehen.
-
escapete schrieb:
LPCSTR - Zeiger auf konstanten String
LPSTR - Zeiger auf SringNaja, die Linux Quellen mal wieder...
In Windows gibt es i.d.R. nur einen LP[C]TSTR, der dann auch UNICODE kann... ein LP[C]STR kann nur ANSI...
-
Patrick schrieb:
"Die Funktion WinMain" sollte man eher wenn man es mit der IHK zu tun hat in "Die Prozedur WinMain" umtaufen, denn ich habe bemerkt die Unterscheiden zwischen Funktionen und Prozeduren sehr penibel.
Erstens ist bei C(++) alles eine Funktion und zweitens könntest du bestenfalls eine void-Funktion als "Prozedur" bezeichnen - und das trifft auf WinMain() nicht zu (die gibt einen int zurück). Also ist "die Funktion WinMain" schon korrekt.