WiecznyWem |
» 2011-07-13 20:06:58 textBoxów jako takich nie ma, ale napisać sobie taki to nie jest nie wiadomo ile roboty. Kłopot może być z polskimi znakami, ale da się to obejść.
Z tego co pamiętam ktoś już napisał proste GUI do SFML. Tutaj link: https://github.com/LaurentGomila/SFML/wiki/TutorialCEGUI Możesz poszperać na wiki, jeżeli dobrze pamiętam, coś tam chyba jeszcze było. (Jak nie będzie nic na nowej to zobacz starą)
W WinApi Ci nie pomogę, bo go nie umiem.
|
|
SeaMonster131 |
» 2011-07-13 21:57:51 |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-07-13 22:16:02 Poszukam SeaMonster. A wie ktoś coś więcej na temat funkcji składowej SFML?: CreateWindow( WindowHHandle Handle, const WindowSetting & Params ); edit: Znalazłem w bibliotecce SFML klasę WindowHandle. WIe ktoś coś więcej o niej? |
|
|
asembler |
» 2011-07-13 22:25:29 CreateWindow(); Zwraca bodajże uchwyt typu HWND więc rysujesz kontrolkę TextBox, podając zwrócony uchwyt do okna w odpowiednim argumencie funkcji ją generującej. |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-07-13 23:15:40 Funkcja Create nic nie zwraca. WindowHandle m = Okno.Create( VideoMode( 800, 600, 32 ), "Nazwa" ); C:\Users\Samsung\Documents\C++\SFML\SFML8\plik.cpp||In function 'int main()':| C:\Users\Samsung\Documents\C++\SFML\SFML8\plik.cpp|8|error: void value not ignored as it ought to be| C:\Users\Samsung\Documents\C++\SFML\SFML8\plik.cpp|8|warning: unused variable 'm'| ||=== Build finished: 1 errors, 1 warnings ===| edit: Może być tak:
Okno.Create( VideoMode( 800, 600, 32 ), "Nazwa" ); CreateWindowEx( 0, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 150, 20, WindowHandle, NULL, hInstance, NULL ); Tylko nie wiem co zrobić z hInstance. (uchwyt do procesu).
|
Skoro nikt nie odpowiada, to chyba zrobię sam GUI. Wziąłem się za to i napisałem taki kod, żeby zobaczyć, czy da się to zrobić: #include<SFML/Window.hpp> #include<SFML/Graphics.hpp> #include<string> using namespace sf; using namespace std; int main() { RenderWindow Okno( VideoMode( 800, 600, 32 ), "Nazwa" ); Event zdarzenie; string tekst; String rysuj_tekst; rysuj_tekst.SetColor( Color::Black ); const Input & przycisk = Okno.GetInput(); while( Okno.IsOpened() ) { Okno.Clear( Color::White ); while( Okno.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) Okno.Close(); if( zdarzenie.Key.Code == Key::A ) { tekst += "A"; rysuj_tekst.SetText( tekst ); } } Okno.Draw( rysuj_tekst ); Okno.Display(); } return 0; } Działa, tylko program jest zbyt czuły i piszę co najmniej 2 literki, przy jednym naciśnięciu klawisza. Jak zrobić jakiś "hamulec"? Znalazłem funkcję GetFrameTime(), tylko nie wiem zbytnio jaki czas liczy, i w jakich jednostkach, |
|
malan |
» 2011-07-14 18:26:54 |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-07-14 20:40:25 Twój sposób mi trochę mulił, więc postanowiłem go trochę "przerobić". bool xyz = false; ... if( !przycisk.IsKeyDown( Key::A ) ) xyz = false;
} if( !xyz && przycisk.IsKeyDown( Key::A ) ) { xyz = true; tekst += "A"; rysuj_tekst.SetText( tekst ); } Zdziwiłem się, ale dzięki tym kilku poprawkom działa prawie idealnie (nie pisze na ekranie tylko, gdy przytrzymam przycisk). |
|
malan |
» 2011-07-14 20:56:16 IsKeyDown lepiej się nadaje do rozwiązanie Twojego problemu :) Mój przykład usunę./edit: @Dawidsoni: Najlepiej do rozwiązanie Twojego problemu nadaje się sf::Event::TextEvent (SFML 2.0). W sumie do takich sytuacji zostało stworzone (to zdarzenie). Ciekawe, ile razy SFML mnie jeszcze zaskoczy :) |
|
1 « 2 » 3 |