Grund-wissen/anforderungen für WinAPI



  • Dafür ist dieses Forum nicht da. Dieses Forum war ursprünglich mal als Austausch für Entwickler gedacht. Wir können und wollen hier nicht immer nur Newbie Fragen diskutieren. Nichts gegen dich Cross_Bow, aber es gibt echt genügend Möglichkeiten sich erstmal selbst etwas zu informieren und wenn du dann KONKRETE Fragen oder Probleme hast, können wir dir gerne helfen. Aber ein bisschen Eigenarbeit musst du ehrlich gesagt schon leisten.



  • CROSS_BOW schrieb:

    Evtl, wäre ich noch froh für die If/Else Anweisung bezüglich der WinAPI, also wie man sie dort anwendet, evtl. noch was über die wichtigsten Variablen wie int, string und char.

    Also irgendwie sieht das für mich so aus, als würdest Du denken, dass die WinAPI eine Programmiersprache ist, das ist sie aber NICHT. Die WinAPI ist die Schnittstelle für das Windows-Betriebssystem, nicht mehr, aber auch nicht weniger.

    Ich hab' mich mal an einem Hello-World probiert:

    #include <windows.h>
    
    // Funktion für die Nachrichtenbehandlung für unser Fenster
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    // Name unserer Fensterklasse
    const char szAppName[] = "HelloWorldFenster";
    
    // Programm-Einstiegspunkt
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
    
    	// eine Variable vom Typen WindowClass anlegen
    	WNDCLASS wc;
    	// Es soll bei vertikalen und horizontalen Größenänderungen neu gezeichnet 
    	// werden
    	wc.style         =  CS_HREDRAW | CS_VREDRAW;
    	// Zeiger auf Nachrichten-Behandlungs-Funktion, welche aufgerufen wird, 
    	// wenn Nachrichten an unser Fenster gesendet werden
    	wc.lpfnWndProc   =  WndProc;
    	// kommt später
    	wc.cbClsExtra    =  0;
    	// kommt später
    	wc.cbWndExtra    =  0;
    	// Instanz-Handle weiterreichen
    	wc.hInstance     =  hInstance;
    	// Cursor für unser Fenster laden (normaler Zeiger)
    	wc.hCursor       =  LoadCursor(NULL, IDC_ARROW);
    	// Icon, welches in der Titelleiste angezeigt wird
    	wc.hIcon         =  LoadIcon(NULL, IDI_APPLICATION);
    	// Brush für den Hintergrund laden
    	wc.hbrBackground =  reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
    	// Name dieser erstellten Fensterklasse übergeben
    	wc.lpszClassName =  szAppName;
    	// Unser Fenster hat kein Menu
    	wc.lpszMenuName  =  0;
    
    	// Fensterklasse bei Windows registrieren
    	RegisterClass(&wc);
    
    	// Fenster auf Basis der oben erstellten Fensterklasse erstellen
    	HWND hWnd  = CreateWindowEx(0,                    // kommt später
    	                            szAppName,            // Name der Fensterklasse
    	                            "Hello World",        // Text in der Titelleiste
    	                            WS_OVERLAPPEDWINDOW,  // Standard-Fenster
    	                            100,                  // x-Position
    	                            100,                  // y-Position
    	                            200,                  // Breite des Fensters
    	                            200,                  // Höhe des Fensters
    	                            0,                    // Später
    	                            0,                    // Später
    	                            0,                    // Später
    	                            0);                   // Später
    
    	ShowWindow(hWnd, SW_SHOW);  // Fenster anzeigen
    	UpdateWindow(hWnd);         // Fenster aktualisieren
    
    	// Nachrichten-Schleife starten
    	MSG msg;
    	while (GetMessage(&msg, NULL, 0, 0)) {  // nächste Nachricht holen
    		TranslateMessage(&msg);  // später
    		DispatchMessage(&msg);   // später
    	}
    
    	return 0;  // Programm beenden
    }
    
    // Nachrichten-Behandlungs-Funktion
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    	// welches Nachricht wurde denn geschickt?
    	switch (message) {
    		case WM_DESTROY:  // Fenster wird zerstört
    			PostQuitMessage(0);  // Nachricht schicken, um Anwendung zu beenden
    		break;                   // Hierdurch wird die Nachrichten-Schleifen beendet
    	}
    
    	// Keine der oben genannten Nachrichten?
    	// Dann Nachricht an die Standard-Nachrichten-Verwaltung weiterleiten
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Mehr sage ich jetzt aber auch nicht mehr dazu.



  • mantiz schrieb:

    Ich hab' mich mal an einem Hello-World probiert:

    das kannste auch einfacher haben:

    MessageBox (0, "Hello, World", "HelloWorldWindow", 0);
    

    😉



  • hmpf 😃



  • Ziemlich sinnfreie Kommentare mantiz! Man muss in den Kommentaren irgendwie erklären warum man etwas macht, sonst bringt es nichts.



  • Er wollte jede Zeile kommentiert haben, klar macht das keinen Sinn, aber so wollte er es haben. Man kann in ein paar Zeilen Code nicht erklären, wie Windows arbeitet, dazu muss man schon ein 'wenig' mehr lesen und verstehen.

    Aber ist mir auch egal, mach's besser.



  • Mantiz' Template finde ich eine gute Vorlage zum Selbstausprobieren.
    Damit kann man schoen rumspielen.
    Sollte direkt mal in die FAQ.

    EDIT: Musste man bei der Hintergrundfarbe nicht noch einen abziehen oder so?



  • SeppSchrot schrieb:

    Musste man bei der Hintergrundfarbe nicht noch einen abziehen oder so?

    Ich glaube das muss man nur machen, wenn man sich nen Brush von den Systemfarben holt. Keine Ahnung, wie da die defines heißen. Ich hab' bisher immer mit direkten Farbangaben gearbeitet und das hat auch immer gepasst. Im obigen Beispiel ist der Hintergrund auf jeden Fall weiss. 🙂



  • Irgendwie komme ich mir verarscht vor 😃

    "Mission erfüllt" 😃



  • mantiz: *daumen hoch* 👍 🙂 *bookmark* Das hilft mir als WinAPI-Neuling auch sehr.

    net: Natürlich geht das sicher auch in einem Befehl, aber dafür lernt man bei dieser ausführluichen Variante doch etwas mehr. *g



  • Ihr versteht doch gar nix. 🙄

    Kauft euch endlich Petzold, ich kann dieses unqualifizierte Gelaber nicht mehr ertragen. Wenn ihr (Also die Neulinge jetzt) meint anhand dieses Codes alles verstanden zu haben, dann erklärt mir doch mal was die Nachrichtenschleife ist und wie sie funktioniert. Sowas bringt euch so ein dummes Tutorial nicht bei, da steht immer nur "SO jetzt tippt ihr dies ein und dann tippt ihr das ein". Petzold ist ein Muss für einen Newbie. Und Jeffrey Richter ist auch ein Muss. Danach könnt ihr Tutorials lesen und werdet merken wie schlecht die meisten sind (nicht alle)!



  • Also jetzt mal ganz ehrlich: Wenn euch das oben weitergeholfen hat, dann freut es mich natürlich, aber ein solcher Aufbau ist in fast jedem WinAPI-Tutorial zu finden, zumindest in denen, die ich mir angesehen habe. Um ein paar Experimente zu machen ist dies auch sehr gut geeignet.

    Aber: Ein Tutorial, so gut es auch sein mag, kann euch nicht alles erklären. Es ist ein Tutorial und keine Anleitung, wie man zum WinAPI-Gott wird. Ich weiß nicht wieviel ich bereits gelesen hab' (Tutorials, Petzold, ...) und ich weiß echt wenig. Wenn ihr euch mit so einem Thema befassen wollt, dann müsst ihr euch damit abfinden, dass ihr viel lesen und ausprobieren müsst.

    Aber hey, es macht doch Spass, also lasst euch nicht entmutigen, mich bringt auch keiner mehr davon ab, soviel Spass hab' ich dabei. 😃



  • Irgendwie wird WinAPI hier immer mit GUI assoziiert. 🙄



  • Feststellung schrieb:

    Irgendwie wird WinAPI hier immer mit GUI assoziiert. 🙄

    In den meisten Fällen fängt man genau dort an und merkt erst etwas später, dass da noch nen fetter Rattenschwanz dranhängt.



  • Petzold ist ein Muss für einen Newbie. Und Jeffrey Richter ist auch ein Muss.

    Ich denke auch, dass das Buch von Charles Petzold für einen WinAPI-Interessierten eine hervorragende Grundlage ist. Man benötigt hierfür allerdings Grundkenntnisse in C. 👍
    Das Buch von J. Richter ist einsame Spitze, aber für einen Newbie ungefähr so leicht zu lesen wie ein Buch über Quantenmechanik. 😃

    Irgendwie komme ich mir verarscht vor.

    Du solltest Dich in C/C++, Grundtypen und vor allem Strings (char-Arrays etc.), fit machen.

    Einfache Beispiele findest Du hier:
    http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api1.htm

    Wo ist Dein Hauptproblem? Lass Dich nicht entmutigen.



  • Irgendwie habe ich das Gefühl, hier herrscht ne Diskussion "Was ist besser, Tutorial oder Buch als Quelle der Weisheit?". Ist doch eigentlich selbstverständlich, daß man beides nutzt, oder? Tutorials als Einführung, kleine Code-Snippets zum Experimentieren und Basteln und die Bücher als Nachschlagewerke oder hilfreich bei echtem Detailwissen.

    Und nicht zu vergessen: Jeder lernt anders. Der eine mag sich lieber Seite für Seite durch ein Buch ackern, der andere experimentiert lieber und bastelt am Code, um zu sehen, was sich ändert. Und es gibt noch andere Herangehensweisen.

    Es gibt keine "optimale" Methode, um eine Sprache zu lernen.



  • Hallo unter:

    http://www.robsite.de/index.php

    wirst du verschiedene Tutorials zu WinAPI finden. Mit gut erklärten Beispielprogrammen bei denen zum Teil jede Zeile des Codes erklärt ist.

    Ich hab mir so auch mein Grundwissen beigebracht.



  • Hi

    Habe mich jetzt entschiend dan Buch zu Kaufen, auch wenn es noch ne Weile dauert bis ich genug Geld dazu habe.
    Ach ja, bezieht sich das Buch noch speziell auf irgend ne Entwicklungsumgebung?
    Und in ein paar Tagen habe ich eh zwei Wochen ferien was mir schön Zeit dazu gibt.
    Wenn ich mir nun mal die Tut - Buch Diskusion anschaue kann ich nur das Tutorial von Schornboeck loben.
    Nicht wegen dem Inhalt, sondern wegen dem Vorwort.
    Denn er hat deutlich erwähnt das es wichtig ist paralell dazu noch Bücher und andere Tutorials durch zu ackern.
    Das ist wenigstens einer der das mal einsieht, ist aber nicht der einzige (-;

    MfG Sämi

    P.s: Gibt es MDSN (oder wie auch immer) auch auf Deutsch?
    Für die Faulen 😃 : Video2Brain - Jetzt lerne ich C++ (8h)



  • CROSS_BOW schrieb:

    P.s: Gibt es MDSN (oder wie auch immer) auch auf Deutsch?

    Nein. Wer sollte das übersetzen und pflegen?



  • Teile gibt es auch auf deutsch. Du musst eben nur die deutsche MSDN installieren. Die Teile die übersetzt sind, betreffen aber hauptsächlich die CRT/MFC/ATL und den
    VS.
    http://msdn2.microsoft.com/de-de/library/ms269115(vs.80).aspx
    Vor ca. 7 jahren gab es auch die WinAPI auf deutsch...


Anmelden zum Antworten