WinAPI Tutorial
-
Guten Abend zusammen.
Ich komme gerade aus der Programmierung mit der MFC und würde mich jetzt gern mal an der reinen WinAPI versuchen.
Kennt jemand ein gutes Tutorial? Ich bräuchte eins, das folgende Themen abdeckt:Grundlagen (Fenster etc.)
Dialogfelder (diese Dinger, die im Gegensatz zum normalen Fenster keine explizit anzugebene Farbe haben, sondern immer grau sind)
Buttons und andere Steuerelemente (alles das, was man in der MFC mit der Leiste direkt auf das Dialogfeld ziehen kann)
MenüsIch würde mich selbst als relativ erfahren in C++ bezeichnen (Programmierung von Konsolenanwendungen seit circa fünf Jahren und in der MFC seit circa drei Jahren). Das heißt, das Tutorial müsste nur die WinAPI behandeln und könnte auf reines C++ verzichten.
-
Ach ja: Die Dialogfelderstellung sollte möglichst ohne Verwendung von Ressourcenvorlagen erklärt werden.
-
Spanky Ham schrieb:
Ach ja: Die Dialogfelderstellung sollte möglichst ohne Verwendung von Ressourcenvorlagen erklärt werden.
Warum denn das? Das ist ja gerade der gag bei Dialogen, dass sie als Dialogressource in der Ressource liegen und einfach nur aufgerufen werden müssen.
Desweiteren, eine Google-Suche sollte genug Treffer für ein oder zwei gute Tutorials liefern.
-
-
Danke. Win-API.de sieht mir nicht so aus, als ob es Dialogfelder behandelt, aber WinProg.org scheint das richtige zu sein.
-
barbie, bist dus? O_o
-
Luckie schrieb:
Wollknäuel Sockenbart schrieb:
Ach ja: Die Dialogfelderstellung sollte möglichst ohne Verwendung von Ressourcenvorlagen erklärt werden.
Warum denn das? Das ist ja gerade der gag bei Dialogen, dass sie als Dialogressource in der Ressource liegen und einfach nur aufgerufen werden müssen.
(Sorry, ich habe Deine Antwort beim letzten Mal wohl überlesen, deshalb kommt die Reaktion so spät.)
Ressourcen, finde ich, sind irgendwie schlechter Stil. Man hat immer diese Abhängigkeiten von der Ressourcendatei und der entsprechenden ID, gespeichert als Makro. Ich möchte das ganze jedoch irgendwann gern in eine einfache Klasse wrappen, wo man nur ein Objekt erstellt und dann per Funktionsaufrufe die Buttons und alles andere hinzufügt. (Wenn das so geht, wie ich es mir vorstelle.)
Und das ist auch der eigentliche Grund, warum ich hier noch mal schreibe: Die beiden Tutorials WinProc.org und Win-Api.de behandeln dieses Thema nicht. Kennt noch jemand ein Tutorial über das Erstellen von Dialogfeldern in der WinAPI rein mithilfe von C++-Quellcode statt Ressourcenskripten?crashterpiece schrieb:
barbie, bist dus? O_o
Äh, nein?
-
[quote=\\"Wollknäuel Sockenbart\\"] Ressourcen, finde ich, sind irgendwie schlechter Stil. Man hat immer diese Abhängigkeiten von der Ressourcendatei und der entsprechenden ID, gespeichert als Makro.[/quote] Kann ich nicht nachvollziehen. Klar, wen nich einmal eien ID für ein Steuerelement vergeben habe, dann sollte man dabei bleiben. Benutze ich keine Dialogressourcen bin ich immer vom Handle abhängig bzw. muss es jedes mal neu ermitteln. Und als schlechten Stil empfinde ich das nun gar nicht. Nur weil es eine Erleichterung ist, muss es nicht schlecht sein. Ich schneide mein Brot auch mit einer elektrischen Brotschneidemaschine, obwohl ich auch eine mechanische benutzen könnte. Ist es jetzt schlechter Stil, dass ich die elektrische benutze?
Ich möchte das ganze jedoch irgendwann gern in eine einfache Klasse wrappen, wo man nur ein Objekt erstellt und dann per Funktionsaufrufe die Buttons und alles andere hinzufügt.
Warum benutzt du nicht eine fertige Klassenbibliothek, wie die MFC oder VCL?
Kennt noch jemand ein Tutorial über das Erstellen von Dialogfeldern in der WinAPI rein mithilfe von C -Quellcode statt Ressourcenskripten?
Du solltest dir die Tutorials mal genauer angucken. Aiuch Childfenster werden mit CreateWindow(ex) erzeugt. Und ich bin mir ziemlich sicher, das wird in den Tutorials behandelt.
-
Kann ich nicht nachvollziehen. Klar, wen nich einmal eien ID für ein Steuerelement vergeben habe, dann sollte man dabei bleiben. Benutze ich keine Dialogressourcen bin ich immer vom Handle abhängig bzw. muss es jedes mal neu ermitteln. Und als schlechten Stil empfinde ich das nun gar nicht. Nur weil es eine Erleichterung ist, muss es nicht schlecht sein. Ich schneide mein Brot auch mit einer elektrischen Brotschneidemaschine, obwohl ich auch eine mechanische benutzen könnte. Ist es jetzt schlechter Stil, dass ich die elektrische benutze?
Ich bezeichne Ressourcenskripte nicht als schlechten Stil, weil sie eine Erleichterung sind, sondern weil sie externe Abhängigkeiten darstellen, die die Objektorientierung meiner Meinung nach ad absurdum führen. Ich möchte das gerne so haben: Es gibt eine Klasse Dialog. Wenn ich davon ein Objekt erstelle und eine Funktion Show oder DoModal aufrufe, soll er auf dem Bildschirm erscheinen. Möchte ich weitere Funktionalitäten haben, dann leite ich die Klasse ab und füge in einer Initialisierungsfunktion zum Beispiel weitere Steuerelemente hinzu. Das würde ich als halbwegs anständigen Stil bezeichnen. Dagegen jedoch eine Ressourcenvorlage mit einer externen ID-Nummer zu haben (die ja auch nicht doppelt vorkommen darf, also muss man darauf aufpassen), ist ein Ausbrechen aus der Objektorientierung mit ihrer Kapselung. Ich könnte durch die besagte Abhängigkeit von festen ID-Nummern zum Beispiel auch nicht zu jemandem sagen: Hier, binde das in dein Projekt ein und benutze mein Dialogfeld. Doch mit einer Klassensammlung würde sowas ohne Probleme funktionieren. Deshalb brauche ich ein Tutorial, das die Erstellung von Dialogfeldern durch C++-Code und nicht durch Ressourcenskripte erklärt.
Warum benutzt du nicht eine fertige Klassenbibliothek, wie die MFC oder VCL?
Dazu einer meiner vorherigen Beiträge:
Ich komme gerade aus der Programmierung mit der MFC und würde mich jetzt gern mal an der reinen WinAPI versuchen.
Das heißt: Ich möchte gerne unabhängig von diesen Bibliotheken und Klassensammlungen sein. Ich könnte eine MFC-Anwendung zum Beispiel nicht mit dem Windows-Port des GCC kompilieren. Mit reinen WinAPI-Anwendungen geht das aber.
Übrigens sollen meine Klassen keine riesige Funktionalität haben, sondern einfach nur einen Wrapper darstellen, die so ein Fenster bzw. ein Dialogfeld schnell erstellen ohne dass man diese 100 Zeilen immer wieder eintippen muss.Du solltest dir die Tutorials mal genauer angucken. Aiuch Childfenster werden mit CreateWindow(ex) erzeugt. Und ich bin mir ziemlich sicher, das wird in den Tutorials behandelt.
Sind Child-Fenster das gleiche wie Dialogfelder (die Dinger mit den Schaltflächen)? Ich dachte immer, die WinAPI macht da einen Unterschied zwischen Window und Dialog. Und hier: www.winprog.org/tutorial/dialogs.html wird eben nur auf die Erstellung mithilfe einer Ressource eingegangen.
-
OT: Findest Du Drawn together eigentlich wirklich so gut?
Das alte Programm war besser mit Andy Milonakis und Wonder Showzens
-
[quote="Prinzessin Clara"]
Deshalb brauche ich ein Tutorial, das die Erstellung von Dialogfeldern durch C++-Code und nicht durch Ressourcenskripte erklärt.
Eigene Dialoge sind nun mal, bis auf die Windows Standarddialoge, an Ressourcenscripte gebunden. Und wenn du selber zur Laufzeit Elemenete hinzufügen willst, dann kannst du auch gleich mit normalen Fenstern arbeiten.
-
Tschuldigt, dass ich erst so spät antworte.
OT: Findest Du Drawn together eigentlich wirklich so gut?
Das alte Programm war besser mit Andy Milonakis und Wonder ShowzensDrawn Together ist ganz nett. Andy Milonakis war auch nicht schlecht. Den Grund für meine Namenswahl in diesem Thread kann man anhand des Datums und der Uhrzeit des ersten Beitrags erkennen.

Eigene Dialoge sind nun mal, bis auf die Windows Standarddialoge, an Ressourcenscripte gebunden. Und wenn du selber zur Laufzeit Elemenete hinzufügen willst, dann kannst du auch gleich mit normalen Fenstern arbeiten.
Aber es muss doch möglich sein, so ein Dialogfeld dynamisch zu erstellen. (Bzw. geht es mir nicht um das Dynamische, sondern um das quellcodetechnische, statt das Erstellen mit externen Ressourcendateien.) Von mir aus auch mit einem String, den man übergibt, und der dann genau den Text beinhaltet, der eigentlich in einem Ressourcenskript steht. Wie gesagt: Ressourcenskripte sind ein Ausbrechen aus der Objektorientierung (wenn man OO realisieren will). (Besonders diese ID-Abhängigkeit ist blöd und viel zu statisch.) Die möchte ich nur zum Einbinden von Dateien nehmen (wenn ich zum Beispiel ein Bitmap als Ressource habe), aber nicht für Dinge, die man auch im Code generieren kann, wie eben Fenster oder Dialoge. Und mit normalen Fenstern arbeiten, würde zwar gehen, doch die haben leider nicht diese dialogfeldtypischen Eigenschaften, wie zum Beispiel das Durchlaufen von Controls mit der Tab-Taste.
-
Fenster kann man mit CreateWindow(Ex) dynamisch erstellen. Dialoge eben nicht.
-
Dialoge kann man mit DialogBoxIndirectParam/CreateDialogIndirectParam dynamisch erstellen.
-
Luckie schrieb:
Prinzessin Clara schrieb:
Deshalb brauche ich ein Tutorial, das die Erstellung von Dialogfeldern durch C++-Code und nicht durch Ressourcenskripte erklärt.
Eigene Dialoge sind nun mal, bis auf die Windows Standarddialoge, an Ressourcenscripte gebunden. Und wenn du selber zur Laufzeit Elemenete hinzufügen willst, dann kannst du auch gleich mit normalen Fenstern arbeiten.
Es gibt aber auch Dialog-Templates...-> DLGITEMTEMPLATE uvm.
Dazu ist <DAS> ganz nett
.
-
Dazu ist <DAS> ganz nett
Danke, aber das Ding hat soviele Fehler, das lässt sich gar nicht kompilieren.
Können diese Leute ihre Quellccodes nicht prüfen, bevor sie sie ins Internet stellen?
-
onthefly schrieb:
Dialoge kann man mit DialogBoxIndirectParam/CreateDialogIndirectParam dynamisch erstellen.
Gibt es dazu nicht irgendwo ein Tut?
-
Elektronix schrieb:
onthefly schrieb:
Dialoge kann man mit DialogBoxIndirectParam/CreateDialogIndirectParam dynamisch erstellen.
Gibt es dazu nicht irgendwo ein Tut?
-
Ich meinte ein Tutorial, kein Codeschnippsel.
Außerdem ist das C++, und ich bevorzuge bei der WinAPI C.Es gibt aber auch Dialog-Templates...-> DLGITEMTEMPLATE uvm.
Laut MSDN gibt es DLGTEMPLATE und DLGITEMTEMPLATE für WinCE. Bezieht sich das auch auf die PC-Windows-Versionen?
EDIT: Letzte Frage hat sich erledigt. Hab etwas gefunden aus ner Hilfe für Win3.11

-
Elektronix schrieb:
Ich meinte ein Tutorial, kein Codeschnippsel.
Außerdem ist das C++, und ich bevorzuge bei der WinAPI C.Es gibt aber auch Dialog-Templates...-> DLGITEMTEMPLATE uvm.
Laut MSDN gibt es DLGTEMPLATE und DLGITEMTEMPLATE für WinCE. Bezieht sich das auch auf die PC-Windows-Versionen?
EDIT: Letzte Frage hat sich erledigt. Hab etwas gefunden aus ner Hilfe für Win3.11

Der Post war NICHT von mir...ich regge mich IMMER vorher!
Hab grad nochmal gesucht aber leider dazu keine Tuts gefunden. -Sry-