Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML, C++] Kontrolka TextBox

Ostatnio zmodyfikowano 2011-07-14 22:41
Autor Wiadomość
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.
P-35926
SeaMonster131
» 2011-07-13 21:57:51
Napisałem w google sfml hwnd winapi i kliknąłem drugi link:
http://www.sfml-dev.org/tutorials/1.5/graphics-win32.php

Możesz to sprawdzić :)


//widze że link do google mi nie działa. No cóż, jak chcesz to wpisz sfml hwnd winapi lub coś podobnego. :)
P-35932
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?
P-35934
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.
P-35935
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:
C/C++
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ć:
C/C++
#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,
P-35943
malan
» 2011-07-14 18:26:54
C/C++
/*
Przykład usunięty przez malana!
*/
Jakoś tak to będzie...
P-35971
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ć".
C/C++
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).
P-35972
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 :)
P-35973
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona