1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Grafisches Programmieren mit c++

Discussion in 'Programmieren' started by OKeh, Jan 23, 2005.

Thread Status:
Not open for further replies.
  1. OKeh

    OKeh Byte

    Ich habe schon ein Buch über c++ gelesen und 2 e-books runtergeladen. Darin habe ich gelernt wie man in der Eingabeaufforderung Rechenprogramme und ähnliches programmiert. Doch in keinem wurde beschrieben, wie ich in einem Windowsfenster ein grafisches Programm mache. Kennt irgendjemand ein Buch (am besten natürlich ein kostenloses e-book) indem ich das lerne? Gut wäre auch wenn darin steht wie man auf seine Hardware wie z.B. den Line-In Eingang der Soundkarte zugreift.
    Danke für alle Antworten!
     
  2. Michi0815

    Michi0815 Guest

  3. OKeh

    OKeh Byte

    Danke für die schnelle Antwort :). Aber sorry für meine Dummheit. :aua: Ehrlichgesagt verstehe ich in dem Tourial garnichts (nicht nur weil es in englisch ist!) Das ist schon etwas kurz beschrieben. Oder habt ihr c++ mit nur ein paar Seiten Tourials gelernt?
    In der Suchmaschiene habe ich bis jetzt noch nichts besseres gefunden.
     
  4. OKeh

    OKeh Byte

    Ach ja, und das Programm lässt sich nicht kompilieren. (mit Def-Cpp 5)
     
  5. specialist7

    specialist7 Kbyte

    ich würde dir eine vernünftige IDE empfehlen. dann muss man die windowsapplikation nicht selbst kreieren, sondern kann sie per drag & drop erstellen...
     
  6. Michi0815

    Michi0815 Guest

    sorry specialist, aber damit bin ich nicht einverstanden.

    man sollte erst wissen und verstehen was so an logik/programmcode hinter den fenstern steckt bevor man damit beginnt wie wild oberflächen "zusammen zu klicken". das kann jeder dressierte affe. und was dabei heraus kommt kann man hier recht gut sehen: http://webstage.pcwelt.de/forum/showthread.php?p=719630#post709417
     
  7. Michi0815

    Michi0815 Guest

    zum thema:

    quellcode lesen und nachvollziehen ist ein guter weg zum programmieren lernen.

    dieser spezielle code funktioniert in fast jeder programmiersprache, die die windows gdi anspricht strukturell fast gleich; mal sehen was er macht....

    beginnen wir mit der main-function. zuerst werden ein paar variablen definiert, die später verwendet werden - bekannt also langweilig; die typen sind in der windows.h definiert - wenn die bei dir anders heissen sollten (wahrscheinlich ist das so wenn dein compiler streikt) hilft ein blick in die genannte datei.

    dann wird es erstmal verhalten interessant: die verheissungsvolle variable "windowclass" wird initialisiert.
    windowClass.cbSize = sizeof(WNDCLASSEX); // grösse der struktur; recht häufig unter windows; hängt mit der art der speicherverwaltung zusammen
    windowClass.style = CS_HREDRAW | CS_VREDRAW; // irgendwelche konstanten,
    windowClass.lpfnWndProc = WndProc; // ganz wichtig - sorgt später dafür das dein programm auch weiss was es mit dem fenster machen soll
    windowClass.cbClsExtra = 0;//kein extra speicher für die fensterklasse
    windowClass.cbWndExtra = 0;//kein extraspeicher für das fenster
    windowClass.hInstance = hInstance;//die mutterinstanz - dein programm
    windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//standard-icon
    windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);//standard-cursor
    windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//weisser fensterhintergrund
    windowClass.lpszMenuName = NULL;//kein menü
    windowClass.lpszClassName = "MyClass";//klassen name - damit sprichst du die klasse später an
    windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);//taskleistenicon (???)

    dann wird das ganze mit RegisterClassEx(&windowClass) in windows registriert/integeriert. ab jetzt weiss windows dass dein programm ein fenster bastelt.

    wenn das geplappt hat, wird das fenster mit CreateWindowEx erzeugt. kommen natürlich wieder ein paar initialisierungsdaten hinzu. ist eigentlich alles knapp aber doch erklärt.

    erst jetzt hast du ein fenster! aber damit sich das programm nicht sofort beendet brauchst du eine message-loop und das ist diese while (!done) schleife. die fängt alle an dein programm gerichteten systemnachrichten (message) ab und bleibt da drinnen so lange bis es den befehl erhält sich zu beenden (wm_quit)

    inzwischen - also quasi parallel dazu - arbeitet das fenster eigenständig! und zwar mit der WndProc funktion.
    das fenster kriegt ab und zu eine nachricht (mit der maus drüber wegfahren, drauf klicken, es verschieben, es verkleinern/vergrössern, etc) und auf die nachrichten reagiert es:
    wenn es erzeugt wird bekommt es die WM_CREATE meldung - da regiert es aber nicht drauf.
    wenn es geschlossen wird bekommt es die WM_CLOSE meldung - es andwortet brav wie es sich gehört mit einer wm_quit meldung (auf die wiederum die message-loop vom hauptprogramm wartet)
    und dann endlich der eigentliche zeck des ganzen: wenn es sich selber zeichen soll bekommt es die WM_PAINT meldung! und jetzt endlich öffnet es einen device-kontext (hDC, so eine art vorlage für das was im fenster später zu sehen sein soll - das fenster darf nicht in sich selber zeichnen, das macht windows), setzt für den kontext die zeichenfarbe (blau) und schreibt den text da hinein und sagt windows dass es mit seiner vorlage fertig ist (EndPaint) und sie gerne dargestellt hätte.

    nachdem es einige (hundert) zusätzliche nachrichten gibt, die das fenster nicht interessieren ruft es noch eine standardfunktion auf, die sich um den rest kümmert: DefWindowProc

    und das wars schon.
     
  8. specialist7

    specialist7 Kbyte

    man muss ja nicht immer meiner meinung sein... :D

    also mal ernsthaft, was willst du mit dem link sagen? das zitat, auf das der link verweist?

    hatte den post so spät abends nicht komplett gelesen bzw. hatte er mich nicht ganz erreicht... -.- ich dachte, er wolle eine GUI erstellen und habe nicht gesehen, dass er winapi lernen will...

    ZUM THEMA:

    http://www.onlinetutorials.de/cpp-index.htm
     
  9. Michi0815

    Michi0815 Guest

    ack! soll einer diskussion recht zuträglich sein, wenn es mindestens 2 verschiedene meinungen gibt :D
    nur ein beispiel, was passiert, wenn jemand ohne jedes hintergrundwissen drauf los programmiert. D@nger glaubt, er könne nach 2 jahren übung mit vb einen voll ausgewachsenen browser schreiben. :rolleyes:
    vb ist dafür ausgelegt, einfache aber ansprechende oberflächen zu basteln - die programmstruktur hinter dem bunten fenstern ist aber viel zu starr für wirklich aufwändige programme. aber woher soll er denn das wissen, wenn das vollautomatische klick-tool den ganzen kritischen code für ihn produziert?
     
  10. specialist7

    specialist7 Kbyte

    im erwähnten thread habe ich mich ja anfangs auch noch beteiligt, aber dann war ich im urlaub und hatte danach keine lust mehr, alles durchzuarbeiten... ^^ ist interessant mit dem browser. vllt schafft er es ja heute abend, ihn zu programmieren und ihn uns dann vorzustellen. sollte ja nach so viel vb erfahrung ziemlich schnell gehen, so etwas zu erschaffen... :D
     
  11. OKeh

    OKeh Byte

    Danke. Jetzt verstehe ich schon viel mehr :jump:. Ich hoffe ich bekomme das bald mal hin.
     
  12. OKeh

    OKeh Byte

    Was ist das für eine Headerdatei: "stdafx.h"
    Die findet mein Compiler nicht.
     
  13. specialist7

    specialist7 Kbyte

    wenn du den microsoft visual c++ compiler benutzt, wird diese headerdatei erstellt und includiert. benutzt du einen anderen compiler kannst du den eintrag entfernen. in der stdafx.h wird aber die afxwin.h includiert, die du dann bei dir einbinden musst. (ok, war ein bisschen schwer verständlich ausgedrückt, aber du schaffst das schon... )
     
Thread Status:
Not open for further replies.

Share This Page