Gość Opublikowano 13 Marca 2014 Udostępnij Opublikowano 13 Marca 2014 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 Więcej opcji udostępniania...
Konrad-GM Opublikowano 13 Marca 2014 Udostępnij Opublikowano 13 Marca 2014 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 Więcej opcji udostępniania...
Gość Opublikowano 13 Marca 2014 Udostępnij Opublikowano 13 Marca 2014 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 Więcej opcji udostępniania...
Konrad-GM Opublikowano 13 Marca 2014 Udostępnij Opublikowano 13 Marca 2014 Ź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 Więcej opcji udostępniania...
Gość Opublikowano 14 Marca 2014 Udostępnij Opublikowano 14 Marca 2014 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 Więcej opcji udostępniania...
Konrad-GM Opublikowano 15 Marca 2014 Udostępnij Opublikowano 15 Marca 2014 Ładnie opisane znajduje się to na MSDN: http://msdn.microsoft.com/en-us/library/wi...5(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/wi...1(v=vs.85).aspx Zapewne nie ustawiasz odpowiedniego trybu konsoli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę