SDL Fenster maximieren



  • Danke für Antwort.
    Auf welche Flags willst du hinaus?

    Ich habe wa gerde mit SDL_RESIZABLE probiert, das klappt auch ganz gut, nur wie vergrößere ich das Surface wenn das Fenster vergrößert wird?

    MfG
    _HELP_



  • Ich habe es jetzt geschafft das Fenster zu vergrößern, das Problem ist jetzt, dass ein kleiner Streifen des Surfaces nicht "neu gezeichnet" wird. Über der Startleiste befindet sich ein ca. 0,5 cm breiter Streifen der das dahinterliegende Programm darstell. Ich hoffe jeder weis was ich meine, ich weis nämlich nicht wie ich das beschreiben kann.
    Wenn ich aber dann ein anderes Fenster in den Vordergrund holen und dann wieder mein Programm anklicke ist der ganze Bereich bedeckt. Wisst ihr voran das liegen kann?
    Und was noch ganz praktisch wäre ist, wenn sich das Programm gleich beim starten maximieren würde. Geht das?

    MfG
    _HELP_



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kannst Du das nicht aus WinMain rausziehen, über die Argumente?? (styleMaximized bla)



  • Sgt. Nukem schrieb:

    Kannst Du das nicht aus WinMain rausziehen, über die Argumente?? (styleMaximized bla)

    WinMain ist gar nicht gut, soll ja auch auf anderen Betriebssystemen laufen

    Warum wurde mein Beitrag verschoben? Jetzt musste ich mich extra registrieren...



  • HELP schrieb:

    Sgt. Nukem schrieb:

    Kannst Du das nicht aus WinMain rausziehen, über die Argumente?? (styleMaximized bla)

    WinMain ist gar nicht gut, soll ja auch auf anderen Betriebssystemen laufen

    Öhhhhh... jaaa... das war Blödsinn, da hast Du recht... 🙄 😃



  • keine mehr ne Idee?



  • Das wird nicht gehen, ohne auf die API des Betriebssystems zurückzugreifen. Entweder komplett Fullscreen oder Fenster.

    Man kann aber in der Größe veränderbare Fenster erstellen. Dann kann der Benutzer sich das selber zurechtziehen wie er will. Ist ohnehin die beste Variante.

    (Und die WinMain hat damit garnichts zu tun. Da hat man höchstens einen Parameter wie der Benutzer es gerne hätte. Maximieren müsste man trotzdem noch selbst).



  • DrGreenthumb schrieb:

    (Und die WinMain hat damit garnichts zu tun. Da hat man höchstens einen Parameter wie der Benutzer es gerne hätte. Maximieren müsste man trotzdem noch selbst).

    Jo, das

    Sgt. Nukem schrieb:

    Kannst Du das nicht aus WinMain rausziehen, über die Argumente?? (styleMaximized bla)

    bezog sich auch lediglich auf

    HELP schrieb:

    Und was noch ganz praktisch wäre ist, wenn sich das Programm gleich beim starten maximieren würde.

    . Dann könnte der Benutzer in der Verknüpfung bzw. den Eigenschaften festlegen, ob er es maxi- oder minimiert etc. haben will. Leider scheissen da ja die meisten Progs drauf... 👎

    Find' ich trotzdem irgendwie ... komisch, daß eine plattformunabhängige Lib wie SDL das nicht beherrscht... 😕
    Mal als Wanted Feature proklamieren, wa!?



  • Nagut, dann lass ich das mit dem automatischen maximieren.
    Was mir aber wichtig ist die Ursache von dem oben beschriebenen Fehler, hier mal ein Screen:
    http://baueram.dyndns.org/1.jpg



  • Sgt. Nukem schrieb:

    Find' ich trotzdem irgendwie ... komisch, daß eine plattformunabhängige Lib wie SDL das nicht beherrscht... 😕
    Mal als Wanted Feature proklamieren, wa!?

    Es ist ja keine GUI-Lib. Die hat mit Fenstern nix am Hut.

    (abgesehen davon hat sich IMO ein Fenster auch nicht selbständig zu maximieren oder sonst irgendwie die Größe oder Position zu verändern)



  • HELP schrieb:

    Ich habe es jetzt geschafft das Fenster zu vergrößern, das Problem ist jetzt, dass ein kleiner Streifen des Surfaces nicht "neu gezeichnet" wird. Über der Startleiste befindet sich ein ca. 0,5 cm breiter Streifen der das dahinterliegende Programm darstell. Ich hoffe jeder weis was ich meine, ich weis nämlich nicht wie ich das beschreiben kann.

    Wie hast du das jetzt vergrößert? Mit Hilfe der WinApi? Dann brauchst du dich nicht über komische Nebeneffekte wundern.

    Mir ist jedenfalls kein Event bekannt, bei dem man neu zeichnen müsste. Eigentlich steht alles was man braucht und überhaupt machen kann hier.



  • DrGreenthumb schrieb:

    HELP schrieb:

    Ich habe es jetzt geschafft das Fenster zu vergrößern, das Problem ist jetzt, dass ein kleiner Streifen des Surfaces nicht "neu gezeichnet" wird. Über der Startleiste befindet sich ein ca. 0,5 cm breiter Streifen der das dahinterliegende Programm darstell. Ich hoffe jeder weis was ich meine, ich weis nämlich nicht wie ich das beschreiben kann.

    Wie hast du das jetzt vergrößert? Mit Hilfe der WinApi? Dann brauchst du dich nicht über komische Nebeneffekte wundern.

    Mir ist jedenfalls kein Event bekannt, bei dem man neu zeichnen müsste. Eigentlich steht alles was man braucht und überhaupt machen kann hier.

    Die url kenn ich schon, hatte es mit Hilfe dieser Seite geschafft.
    Sobald das Event SDL_VIDEORESIZE kommt, lasse ich mit

    case SDL_VIDEORESIZE:
    SDL_ResizeEvent * eventp = (SDL_ResizeEvent*)&event;
    screen=SDL_SetVideoMode(eventp->w, eventp->h, 16, SDL_HWSURFACE|SDL_RESIZABLE|SDL_DOUBLEBUF);
    

    das Fenster vergrößern, dabei tritt dieser Grafikkfehler auf. Ich habe bei google mehrere Quelltexte gefunden, darin wird das genauso gemacht. Ich könnt auch das Programm auf den Server laden, dann könnt ihr diesen Effekt euch anschauen. Hab das Programm für Windows und Linux compiliert, aber habs unter Linux noch nicht getestet.

    MfG
    _HELP_



  • Was ist denn das für ein cast? Von welchem Typ ist 'event'?

    Die SDL_ResizeEvent-Struktur bekommst du als Member von SDL_Event: http://sdldoc.csn.ul.ie/sdlevent.php

    So wie ich das sehe, muss man da nichts casten.



  • Ich hab das aus einem anderen Quellcode entnommen, hatte das vorher auch anders. Hier der Code:

    while(!this->done)
    {
    
    	while(SDL_PollEvent(&event))
    	{
    		switch(event.type)
    		{
    			case SDL_QUIT:
    			done = true;
    			break;
    
    			case SDL_VIDEORESIZE:
    			this->screen = SDL_SetVideoMode(event->resize.w, event->resize.h, 32, SDL_HWSURFACE|SDL_RESIZABLE|SDL_DOUBLEBUF);
    			break;
    
    		}
    	}
    
    	SDL_Flip(this->screen);
    }
    


  • lol?

    Wenn ich

    SDL_SetVideoMode(event->resize.w, event->resize.h[b]+1[/b], 32, SDL_HWSURFACE|SDL_RESIZABLE|SDL_DOUBLEBUF);
    

    oder

    SDL_SetVideoMode(event->resize.w, event->resize.h[b]-1[/b], 32, SDL_HWSURFACE|SDL_RESIZABLE|SDL_DOUBLEBUF);
    

    mache, wird alles richtig angezeigt, wobei bei -1 eine Pixelreihe unten fehlt, was auch logisch ist. Will der mich verarschen, oder an was liegt das??


Anmelden zum Antworten