konsolen problem ...



  • hab hier in der faq folgende funktion dafür gefunden

    void Resize ( DWORD SizeX , DWORD SizeY , HANDLE StdOutput = GetStdHandle ( STD_OUTPUT_HANDLE ) )
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        COORD c = GetLargestConsoleWindowSize ( StdOutput );
        SMALL_RECT sr;
    
        GetConsoleScreenBufferInfo ( StdOutput , &csbi );
    
        sr.Bottom = min ( SizeX , c.X ) - 1;
        sr.Right = min ( SizeY , c.Y ) - 1;
        sr.Top = sr.Left = 0;
    
        c.X = SizeX;
        c.Y = SizeY;
    
        if ( csbi.dwSize.X > SizeX || csbi.dwSize.Y > SizeY )
        {
            SetConsoleWindowInfo ( StdOutput , TRUE , &sr );
            SetConsoleScreenBufferSize ( StdOutput , c );
        }
        else
        {
            SetConsoleScreenBufferSize ( StdOutput , c);
            SetConsoleWindowInfo ( StdOutput , TRUE , &sr );
        }
    }
    

    aber bekomme folgenden fehler
    no matching function for call to `min(DWORD&, SHORT&)'

    also, die funktion min wird nicht gefunden

    hab die <windows.h> drinne, un auch die <dos.h> probiert .... aber hilft nicht



  • was könnte min denn wohl machen? womöglich das minimum suchen, von den zwei werten?



  • also einfach die kleinere zahl rausfinden ?



  • Hmm sollte er normalerweise kennen, bist aber nicht der erste bei dem das min() nicht hinhaut 😞

    Aber im Prinzip reicht es folgende Funktion ebenfalls zu definieren:

    inline DWORD min (DWORD a, DWORD b)
    {
        return a<b?a:b;
    }
    

    BTW: Benütz doch die (sowieso bessere) Version aus der Improved Console. Keine Ahnung warum ich die noch nicht übertragen habe 😞 - min()

    void setSize (DWORD x, DWORD y) 
        { 
            if(x < 13) 
                x = 13; 
    
            if(y < 1) 
                y = 1; 
    
            COORD maxsize; 
            maxsize = GetLargestConsoleWindowSize(m_hout); 
    
            COORD bufsize; 
            bufsize.X = min(x,maxsize.X); 
            bufsize.Y = min(y,maxsize.Y); 
    
            SMALL_RECT wndsize; 
            wndsize.Top = 0; 
            wndsize.Left = 0; 
            wndsize.Right = min(x,maxsize.X) - 1; 
            wndsize.Bottom = min(y,maxsize.Y) - 1; 
    
            SetConsoleScreenBufferSize(m_hout,bufsize); 
            SetConsoleWindowInfo(m_hout,TRUE,&wndsize); 
            SetConsoleScreenBufferSize(m_hout,bufsize); 
        }
    

    min() benötigst du aber trotzdem.

    MfG SideWinder



  • SideWinder schrieb:

    inline DWORD min (DWORD a, DWORD b)
    {
        return a<b?a:b;
    }
    

    Falsch.
    So geht das

    #define min(a,b) (a)==(b)?0:((a)<(b)?(a):(b))
    


  • die funktion funktioniert nicht ganz ... sie ändert nämlich nur den buffer des fensters, nich die größe ansich ...



  • @Minimalist: Sicher?

    MSDN schrieb:

    The min macro is defined as follows:

    #define min(a, b) (((a) < (b)) ? (a) : (b))

    Das sieht mir mehr nach meiner Version aus...

    MfG SideWinder



  • egal, welche , funktionieren tuts nich 😃

    es wird nur die fensterpuffer größe geändert ...



  • Hmm, hast du an den Einstellungen der Konsole gespielt? Bei mir funktionierts nämlich ohne Probleme (WinXP Prof, VC++ 2003 Enterprise).

    MfG SideWinder



  • SideWinder schrieb:

    VC++ 2003 Enterprise).

    Warum benutzen diese Hobbycoder nur immer die teuren Tools?



  • Ich finde die IDE sehr eingängig und praktisch, der Compiler ist auch sehr gut. Mir würde persönlich die Professional auch reichen, aber wir bekommen nunmal die Enterprise. Das meiste hab ich sowieso nicht installiert - was brauch ich CrystalReports, etc.

    MfG SideWinder


Log in to reply