SDL Fenster maximieren



  • 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