Skocz do zawartości

[C++]Tekstowe "GUI"


Mimek

Rekomendowane odpowiedzi

Witajcie, dawno mnie tu nie było :)

 

Potrzebuję pomocy w stworzeniu interaktywnej tabeli w aplikacji konsolowej w C++ wykorzystując jedynie funkcje z windows.h.

Nie zależy mi na napisaniu tego przez kogoś, tylko na pomocy w zrozumieniu konsolowych funkcji WinApi.

Czy byłby ktoś w stanie wytłumaczyć mi, na jakiej zasadzie podzielić konsolę na obszary, które mogłyby reprezentować np. obiekty jednej klasy? Ważny jest właśnie obiektowy opis elementów konsoli. A tu przykład znaleziony gdzieś w odmętach sieci: http://www.hanselman.com/blog/content/binary/far1.png

 

Wszystkim z góry dziękuję za pomoc.

 

Pozdrawiam,

Mimek.

Odnośnik do komentarza
Udostępnij na innych stronach

https://github.com/konrad92/libconsole Nie jest to jakoś szczególnie rozbudowana biblioteka - raczej zabawka.

 

Możesz zmienić rozmiar konsoli poprzez:

void ConsoleSize( unsigned short width, unsigned short height ) const
{
    SMALL_RECT windowSize = {
        0, 0,
        width - 1,
        height - 1,
    };

    SetConsoleWindowInfo( stdOutputHandle, true, &windowSize );
    SetConsoleScreenBufferSize( stdOutputHandle, *((COORD*)&width) );

    // show/hide cursor
    CONSOLE_CURSOR_INFO curInfo = {
        100, !m_hideCursor
    };

    SetConsoleCursorInfo( stdOutputHandle, &curInfo );
}

 

A podział, obiekty i "okienka" to nic innego jak generowanie interfejsu przez wyjście. Np. żeby zmienić pozycję kursora:

unsigned short x = 0, y = 0;
SetConsoleCursorPosition( stdOutputHandle, *((COORD*)&x) );

 

I nie zapomnij o jednym...

HANDLE stdOutputHandle = GetStdHandle( STD_OUTPUT_HANDLE );

Przed dokonywaniem zmian na konsoli potrzebujemy wskaźnika na jego wyjście ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Wielkie dzięki, Konrad, za szybką odpowiedź. Niestety nie będę mógł z biblioteki Twojego autorstwa skorzystać, bo jest to z góry zabronione. Ale i tak dzięki wielkie za pomoc. Czy mógłbym liczyć na dalsze wsparcie? W stworzeniu zwykłej tabeli w konsoli, dwóch kolumn, albo czegokolwiek...

Odnośnik do komentarza
Udostępnij na innych stronach

Źródła tej "biblioteki" są dostępne. Wykorzystuje WinAPI, którego dokumentację znajdziesz pod tym linkiem.

 

Forum jest do wymiany swoich spostrzeżeń jak i wiedzy. Gdybyś miał z czymś problem, pisz na forum. W miarę możliwości nie tylko ja będę mógł Ci pomóc. ;)

 

Polecam zapoznać się z takową funkcją: WriteConsoleOutput

Odnośnik do komentarza
Udostępnij na innych stronach

Witam,

 

udało mi się stworzyć klasę okno, przetrzymującą podstawowe informacje o oknie konsoli, stworzyłem metody do ustawiania rozmiaru okna oraz podawania pozycji kursora myszy. Problem zaistniał w sprawdzaniu, czy LMB został naciśnięty.

 

Mój kod:

    bool ifclick()
    {
        DWORD cNumRead;
        INPUT_RECORD bufor;
        ReadConsoleInput(stdOH, &bufor,1, &cNumRead);
        if((bufor.EventType == MOUSE_EVENT)&&(bufor.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED))
        {
            return true;
        }
        else return false;
    }

.

stdOH jest oczywiście zadeklarowana.

 

Niestety, przy sprawdzaniu w main():

if(test.ifclick())
cout << "KILK";

funkcja nie działa. Czy ktoś wie, dlaczego tak jest?

 

Edit: Zapomniałem:

 

test to oczywiście obiekt klasy okno.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...