Autor Wątek: [WinApi]Jak wczytać tekst z pola tekstowego do zmiennej typu std::string?  (Przeczytany 1544 razy)

Offline kwiator

  • Użytkownik

# Styczeń 17, 2012, 00:29:08
Witajcie!
Mam w swoim programie pola tekstowe(kontrolki typu "EDIT") Chcę za pomocą metody GetWindowText wczytać tekst z tych kontrolek do zmiennych typu std::string. Da się to zrobić?? 

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline kubera

  • Użytkownik
    • Prywatna strona

# Styczeń 17, 2012, 00:39:02
Możesz skorzystać z GetWindowTextLength.
W ten sposób posiadasz dł. tekstu.
Następnie wykonujesz w std::string::reserve na odpowiednią dł.
W ostatniej kolejnośći z pomocą GetWindowText wczytujesz nowy łańcuch na adres pierwszego znaku z zmiennej.

P. S.
Odrobinę podobny przypadek:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644928(v=vs.85).aspx#sending

Pozdrawiam.
« Ostatnia zmiana: Styczeń 17, 2012, 00:52:22 wysłana przez kubera »

Offline gawron89

  • Użytkownik

# Styczeń 17, 2012, 00:49:55
reserve tylko rezerwuje miejsce w pamięci i po użyciu takiej funkcji z winapi jak wyżej, string::size() zwróci 0, lepiej zastosować string::resize();

Offline kubera

  • Użytkownik
    • Prywatna strona

# Styczeń 17, 2012, 00:54:11
@UP, dzięki za korektę.

Offline kwiator

  • Użytkownik

# Styczeń 17, 2012, 01:00:39
Dziękuje wam za pomoc! ostatecznie zrobiłem tak i działa:
DWORD dlugosc = GetWindowTextLength( hEdit[i] );
std::string bufor;
bufor.resize(dlugosc);
GetWindowTextA(hEdit[i],(LPSTR)bufor.c_str(),dlugosc+1);
MessageBoxA(hwnd,bufor.c_str(),"tekst",MB_OK);
Pozdrawiam!

Offline kubera

  • Użytkownik
    • Prywatna strona

# Styczeń 17, 2012, 01:23:59
Miałem na myśli coś takiego, bez const-cast-a.
GetWindowTextA(hEdit[i],&bufor[0],dlugosc+1);
(też się czegoś dowiedziałem :) )