Konsolenfenster Grösse einrichten



  • hustbaer schrieb:

    Lies die Doku (MSDN) zu SetConsoleWindowInfo . Da steht drin was du falsch machst.
    Ja, ich könnte es dir sagen, aber das war SO schnell zu finden (und bevor ich es gefunden habe schon zu erwarten)... und du sollst ja auch lernen Informationen selbst zu finden 😉

    Ok, habe jetzt einige Zeit probiert und versucht den Fehler zu finden aber es funktioniert noch immer nicht.

    Liegt es hieran?

    " Similarly, the Bottom and Right members (or the calculated bottom and right coordinates) cannot be greater than (screen buffer height – 1) and (screen buffer width – 1), respectively. "

    Wie kann ich das denn ändern?
    Danke



  • Es liegt an

    The function fails if the specified window rectangle extends beyond the boundaries of the console screen buffer.

    Und jetzt überleg mal in welcher Reihenfolge du SetConsoleWindowInfo und SetConsoleScreenBufferSize aufrufst.



  • hustbaer schrieb:

    Es liegt an

    The function fails if the specified window rectangle extends beyond the boundaries of the console screen buffer.

    Und jetzt überleg mal in welcher Reihenfolge du SetConsoleWindowInfo und SetConsoleScreenBufferSize aufrufst.

    Oh, danke danke 🙂
    Jetzt funktioniert es.

    Schönen Abend noch.



  • hustbaer schrieb:

    Es liegt an

    The function fails if the specified window rectangle extends beyond the boundaries of the console screen buffer.

    Und jetzt überleg mal in welcher Reihenfolge du SetConsoleWindowInfo und SetConsoleScreenBufferSize aufrufst.

    Tut mir Leid, dich wieder fragen zu müssen aber irgendwie funktioniert es jetzt wieder nicht.
    ich habe die Reihenfolge geändert und anfangs hat es geklappt. Dann eins, zwei mal die Werte verändert und schwups geht es wieder nicht mehr. Woran liegt das denn jetzt?

    #include "stdafx.h" 
    #include <stdlib.h> 
    #include <Windows.h> 
    
    HANDLE wHnd;    // Handle to write to the console. 
    HANDLE rHnd;    // Handle to read from the console. 
    
    int _tmain(int argc, _TCHAR* argv[]) { 
    
        // Set up the handles for reading/writing: 
        wHnd = GetStdHandle(STD_OUTPUT_HANDLE); 
        rHnd = GetStdHandle(STD_INPUT_HANDLE); 
    
        // Change the window title: 
        SetConsoleTitle(TEXT("Win32 Console Control Demo")); 
    
    	// Create a COORD to hold the buffer size: 
        COORD bufferSize = {100, 100}; 
    
        // Change the internal buffer size: 
        SetConsoleScreenBufferSize(wHnd, bufferSize); 
    
        // Set up the required window size: 
        SMALL_RECT windowSize = {0, 0, 99, 99}; 
    
        // Change the console window size: 
        SetConsoleWindowInfo(wHnd, TRUE, &windowSize); 
    
        getchar(); 
        return 0; 
    }
    


  • SetConsoleWindowInfo(ganz klein)
    SetConsoleScreenBufferSize(gewünschte grösse)
    SetConsoleWindowInfo(gewünschte grösse)

    ohne das SetConsoleWindowInfo(ganz klein) kann es nämlich sonst sein dass das SetConsoleScreenBufferSize(gewünschte grösse) nicht geht.
    z.b. wenn das fenster vorher in zumindest einer dimension grösser ist als was man einstellen will

    was du für "ganz klein" einsetzen musst kannst du aber wirklich selbst rausbekommen. steht auch in der doku zu einer der beiden funktionen.



  • hustbaer schrieb:

    SetConsoleWindowInfo(ganz klein)
    SetConsoleScreenBufferSize(gewünschte grösse)
    SetConsoleWindowInfo(gewünschte grösse)

    ohne das SetConsoleWindowInfo(ganz klein) kann es nämlich sonst sein dass das SetConsoleScreenBufferSize(gewünschte grösse) nicht geht.
    z.b. wenn das fenster vorher in zumindest einer dimension grösser ist als was man einstellen will

    was du für "ganz klein" einsetzen musst kannst du aber wirklich selbst rausbekommen. steht auch in der doku zu einer der beiden funktionen.

    Ok, dann bau ich das noch mit ein. Dankeschön.



  • hustbaer schrieb:

    SetConsoleWindowInfo(ganz klein)
    SetConsoleScreenBufferSize(gewünschte grösse)
    SetConsoleWindowInfo(gewünschte grösse)

    ohne das SetConsoleWindowInfo(ganz klein) kann es nämlich sonst sein dass das SetConsoleScreenBufferSize(gewünschte grösse) nicht geht.
    z.b. wenn das fenster vorher in zumindest einer dimension grösser ist als was man einstellen will

    was du für "ganz klein" einsetzen musst kannst du aber wirklich selbst rausbekommen. steht auch in der doku zu einer der beiden funktionen.

    Sorry, aber ich finde einfach nicht, was du meinst. Könntest du mir bitte die Lösung nennen?

    LG



  • Ok sorry, hab es gefunden.
    Es lag daran, dass es die maximale Größe an Zeichen überschritten hat, die ich über GetLargestConsoleWindow(handle); bekommen habe.

    Danke für die Hilfe und die Geduld 🙂



  • Sinnvollerweise machst Du Dir einmal eine Funktion, die Du immer wieder verwenden kannst, zB.:

    void SetWindowExt(int x, int y)
    {
        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;
        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension);
    }
    




  • Mr C schrieb:

    ....minute google...und....:
    http://www.doxapp.com/code/groesse-konsole.html

    Die Funktion wird bloss vermutlich nicht zuverlässig funktionieren.


Anmelden zum Antworten