Fenster ohne viel Code erstellen



  • DWORD threadId = 0;
    HANDLE sThread = CreateThread(0, 0, GuiProc, 0, 0, &threadId );
    
    DWORD WINAPI GuiThread(LPVOID lParam)
    {
    	// Create the GUI
    	sHwnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, GuiProc);
    	if(sHwnd == NULL)
    	{
    		MessageBox(NULL, "Window creation failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
    		return 0;
    	}
    
    	// Process while we have a message queue
    	MSG Msg = {0};
    	while(GetMessage(&Msg, NULL, 0, 0) > 0)
    	{
    		if(!IsDialogMessage(gHwnd, &Msg))
    		{
    			TranslateMessage(&Msg);
    			DispatchMessage(&Msg);
    		}
    	}
    
    	// Standard return
    	return 0;
    }
    
    BOOL CALLBACK GuiProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {
    	switch(Message)
    	{
    		case WM_INITDIALOG:
    		{	
    			//Dialog being created
    		} return true;
    
    		case WM_COMMAND:
    		{
                       //Command
                    }
    		default:
    			return false;
    	}
    	return true;
    }
    


  • CStern schrieb:

    Mein persönlich letzter Versuch mit solchen Dingen war mit QT. Eigentlich gutes Zeugs - aber: Dein Proggie ist danach einfach nicht schnell, bzw. nicht so schnell, wie es ohne das Zeugs wäre. Ergo: Raus damit und ich bin wieder froh. Lieber paar liebevolle Bytes selbst angelegt, aber man weiß wofür und das Proggie ist performant und vor allem: Unabhängig.

    Versuch es doch einfach mal mit RTFM! 👍


  • Mod

    OT:

    CStern schrieb:

    Deswege progge ich lieber Win32 pur, auch wenn manche hier immer wieder MFC einwerfen. MFC ist fehlerhaft und langsam. MFC-Sockets gar ein Albtraum.

    Solche Pauschalaussagen sind albern, dass weißt Du hoffentlich selbst.

    "Die MFC ist fehlerhaft?"
    Die MFC mag Fehler haben. Wenn sie so pauschal fehlerhaft ist, wirst Du ja ganz viele gravierende Fehler nennen können...

    "Die MFC ist langsam?"
    Wo? In welchem Bereich? Ist mir auch noch nicht aufgefallen. Die MFC benutzt entweder direkt die Windows API oder die CRT.
    Auch hier wird Dir mit Sicherheit ein gravierendes Beispiel einfallen.

    Die MFC mag einem nicht passen, weil sie stilistisch sicherlich ihre Haken und Ösen hat. Und auch vom Klassendesign hätte einiges besser gemacht werden können. Aber ich möchte gerne sehen, wie Du eine Öberfläche wie Visual-Studio so mal einfach in Win32 API hinzauberst.
    Mit der MFC oder gar MFC-Next ist das wirklich einfach.



  • CStern schrieb:

    R3dNeXX schrieb:

    wie wärs wenn du dir mal die winapi genauer anschaust ?

    dann wirsde ja mitkriegn, was es mit dem "vielen" code auf sich hat !

    mfg

    Hm,

    den schaue ich mir schon seit 1996 an.

    ich sehe seit Jahren angebliche Entwickler die immer fauler werden.
    Meinst Du das damit? Ansonsten ist Win32 eigentlich easy.

    Das mit dem "Vorgefertigten" ist ok, solange man Software von der Stange schreibt. Aber wehe, es ist etwas "Kreatives" von Dir dabei. Dann fällt das
    ganze Kartenhaus der Frames nämlich plötzlich in sich zusammen und du hast mehr
    Arbeit, als Du eigentlich sparen wolltest.

    Leider kauft niemand Software von der Stange. Und die paar die das tun,
    kennen nichts besseres.

    Mein persönlich letzter Versuch mit solchen Dingen war mit QT. Eigentlich
    gutes Zeugs - aber: Dein Proggie ist danach einfach nicht schnell, bzw.
    nicht so schnell, wie es ohne das Zeugs wäre. Ergo: Raus damit und ich bin
    wieder froh. Lieber paar liebevolle Bytes selbst angelegt, aber man weiß wofür und das Proggie ist performant und vor allem: Unabhängig.

    Deswege progge ich lieber Win32 pur, auch wenn manche hier immer wieder MFC einwerfen. MFC ist fehlerhaft und langsam. MFC-Sockets gar ein Albtraum.

    ich wollte dir ja nicht zu nahe treten, mein Post war eigentlich an den TS gerichtet 🙂

    und ja, da haste Recht, es gibt wirklich immer mehr Entwickler, die fauler werden, ja nicht zu viel Code schreiben oder zu viel nachdenken !
    aber gut, hier gehts eigentlich um was Anderes und es ist ja auch nicht bös gemeint !

    @martinustreveri:
    ich wollte sagen, dass du dir mit n paar Tuts die WinAPI genau anschaust, und dann verstehen wirst, wieso man den ganzen Code braucht

    außerdem finde ich, ist man sehr gut beraten, wenn man sich erstmal die WinAPI anschaut, und dann entweder damit codet oder dir weiterführende Dinger wie z.B. MFC anschaust !

    wenn du dann von der API genug hast, und nicht mehr den Code für ein einfaches Fenster schreiben willst, dann hol dir z.B. als Visual Studio Add-In Visual Assist X, da haste glei ne Code-Snippet-Verwaltung mit dabei und kannst dann dir bestimmten Code speichern und mit n paar Klicks wieder einfügen !
    (ich mach das immer so, seitdem ich über den Code Bescheid weiß 🙂 )

    mfg



  • wenn ihr meint...
    hat einer denn ein gutes WinAPI tut?!?



  • Guckst Du hier links in der Mitte unter "Lessons ...":

    http://nehe.gamedev.net/

    Ist ein guter Einstieg. Und einfacher als Copy'n'paste geht nicht.

    Gruss

    Lars



  • diese nehe tutorials sind mir ein graus, so schlecht gemacht... 👎



  • Ich finde das Tutorial super: schauste http://www.win-api.de



  • falls es noch von Interesse ist:

    hier noch 2 Links, die sehr gut sind, finde ich
    http://www.henkessoft3000.de/
    http://www.pronix.de/pronix-1024.html

    hab damit auch des öfteren was gemacht, finde die gut 😉



  • Die WinApi erfordert immer etwas Code für Fenster. Für die Einrichtung sind CreateWindow, DialogBox, usw. zuständig. Für alle ist eine CALLBACK-Funktion zum Bearbeiten der Nachrichten und eigene Dinge erforderlich. Im Prinzip ist das mit MFC, OWL, etc. auch nicht viel anders. Man muss sich so oder so damit anfreunden. Vorschlag: Charles Petzolds Buch zur Windows-Programmierung, das einige hier ätzend finden.



  • long __stdcall WindowProcess(HWND windowHandle, unsigned message, WPARAM wParam, LPARAM lParam)
    {
    	return DefWindowProc(windowHandle, message, wParam, lParam);
    }
    
    ...
    
    WNDCLASS windowClass = { };
    windowClass.lpfnWndProc = WindowProcess;
    windowClass.lpszClassName = "Main";
    
    RegisterClass(&windowClass);
    
    CreateWindow("Main", 0, WS_VISIBLE, 0, 0, 100, 100, 0, 0, 0, 0);
    


  • mammamia;



  • CStern, wir warten immer noch auf deine Antwort, btw.



  • Chroniker schrieb:

    CStern, wir warten immer noch auf deine Antwort, btw.

    Wir?
    Registriere dich mal, dann gucken wir! nach wir. Ansonsten: Schnauze!Alles Banane?



  • schreib dir deine eigene library (hackt vllt bei der motivation aber nach 3h
    haste für alle anderen programme eine solide grundlage). das ganze schön in
    klassen gekapselt (bloß nicht wie die mfc über benutzer-leitet-ab lösen),
    dann ist das auch gleich viel einfacher. für den anfang kann es reichen daraus
    eine "HWND Create(const char *title, int width, int height)" funktion zu machen.
    (WndProc später hinzufügen über setwindowlong)



  • Wieso, was hat das damit zu tun, ob ich registriert bin oder nicht? Erst Mist reden und sich dann um die Antwort drücken. Dann hab wenigstens die Courage und gib zu, daß du Mist gelabert hast. Lustig Lustig^^



  • CStern schrieb:

    Chroniker schrieb:

    CStern, wir warten immer noch auf deine Antwort, btw.

    Wir?
    Registriere dich mal, dann gucken wir! nach wir. Ansonsten: Schnauze!Alles Banane?

    Selber Schnauze!
    Und ich bin registriert. Also, hast du zu dem Thema noch was zu sagen? Auch ich finde dass du da ziemlichen Bockmist geschrieben hast.



  • CStern ich warte auch auf deine Antwort zum Thema MFC!
    Desweiteren finde ich das dein "Ansonsten: Schnauze!Alles Banane?" nicht in ein Forum gehört und vieles über dich aussagt.



  • ich schließ mich mal meinen beiden Vorrednern an



  • Naja, um mal auf das Thema zurückzukommen...

    Bevor man etwas wie Qt oder wxWidgets einsetzt, sollte man die WinAPI verstanden haben. (Meiner Ansicht nach).
    Auf das Problem der Lektüre bin ich leider auch gestoßen. Bücher finde ich kein einziges, das C++ mit der WinAPI nahe bringt. (Und mal im Ernst: Petzold ist zwar ein Klassiker, aber einfach alt)
    Das WinAPI-Tutorium auf www.win-api.de ist sehr gut gemacht, aber z.B. wie man ein Fenster erstellt musste ich mir 3 mal durchlesen, bis ich jeden Teil des Codes verstehen kann. (Verstehen ist ja das eine, aber die ganzen typedefs und structs, z.B. WNDCLASS bzw. die Parameter von Sachen wie CreateWindows() sich zu merken kann ich immernoch nicht. *g*)
    Aber was auf dieser Seite steht, kann doch nicht alles sein, oder? Es muss doch mehr geben!
    Leider ist auch vieles an Werken der WinAPI für C geschrieben, aber C kann und will man vielleicht auch nicht gleich lernen.


Anmelden zum Antworten