Console - Fenster grösse ändern



  • Hallo

    Wenn ich versuche mit folgendem Code die grösse des Fenster zu veränder, dann geht es manchmal und manchmal eben nicht. An was kann das liegen? Ich weiss einfach nicht mehr weiter.

    // Set console title and size
    void SetConsole(short hight ,short width ,short hight_buf ,short width_buf ,wchar_t *title)
    {
    	SMALL_RECT sr_window = {0};
    	COORD extension;
    	CONSOLE_SCREEN_BUFFER_INFO csbi;
    	HANDLE conouth = GetStdHandle(STD_OUTPUT_HANDLE);
    
    	sr_window.Bottom = 0;
    	sr_window.Left = 0;
    	sr_window.Right = width - 1;
    	sr_window.Top = hight - 1;
    
    	GetConsoleScreenBufferInfo(conouth, &csbi);
    
    	extension.X = max(width, csbi.dwMaximumWindowSize.X);
    	extension.Y = max(hight, csbi.dwMaximumWindowSize.Y);
    
    	SetConsoleScreenBufferSize(conouth, extension);
    	SetConsoleWindowInfo(conouth, TRUE, &sr_window);
    
    	extension.X = width;
    	extension.Y = hight;
    	SetConsoleScreenBufferSize(conouth, extension);
    
    	extension.X = width+width_buf;
    	extension.Y = hight+hight_buf;
    	SetConsoleScreenBufferSize(conouth, extension);
    
    	if(title != NULL)
    		SetConsoleTitleW(title);
    }
    

    Danke fürs anschauen.



  • "hight" ist schon mal falsch 😉 Ansonsten kenn ich diese API jetzt kaum, mir fällt auf den ersten Blick nichts auf.

    Du prüfst die Rückgabewerte nie. Solltest du machen, vielleicht siehst du dann auch, wo etwas schiefgeht und kannst dann evtl. mit GetLastError die genauere Fehlerursache abfragen. Musst da aber jeder Funkton in der Doku nachschauen.



  • Hier mal n Schnipsel von mir:

    void SetWindowExt(int x, int y, int yMulti = 1)
    {
        SMALL_RECT sr_window = {0, 0, x - 1, y - 1};
        COORD      extension;
        CONSOLE_SCREEN_BUFFER_INFO csbi;
    
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    
        extension.X = max(x, csbi.dwMaximumWindowSize.X);
        extension.Y = max(y, csbi.dwMaximumWindowSize.Y);
    
        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension);
        SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &sr_window);
    
        extension.X = x;
        extension.Y = y * yMulti;
        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension);
    }
    

    Noch n Tip: Eine Funktion zum Fenstergröße verändern sollte nicht noch andere Aufgaben erledigen.



  • @Belli

    Auch das funktioniert nicht.



  • Dann, wie Mechanics schon schrieb, Rückgabewerte, Fehlercodes prüfen, und vllt. auch sicherstellen, dass 'vernünftige' Werte als Argumente übergeben werden.

    Und: ein Beispielprogramm posten, dass die Fehler reproduziert, damit man sich das mal ansehen kann.
    Das sollte nicht mehr enthalten, als die Funktion und eine main-Funktion, die den fehlerproduzierenden Aufruf macht.


Log in to reply