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

[WinAPI] GetWindowText() nie wczytuje tekstu do bufora

Ostatnio zmodyfikowano 2014-07-08 00:15
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[WinAPI] GetWindowText() nie wczytuje tekstu do bufora
» 2014-07-07 18:33:32
Oto definicja mojego textboxa, kontrolki statycznej i buttona:
C/C++
HWND hCommandLine = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 290, 763, 20, hwnd, NULL, hThisInstance, NULL );

HWND hStaticDebugBox = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 10, 10, 763, 270, hwnd,( HMENU ) ID_STATICTEXTBOX1, hThisInstance, NULL );

HWND hExecButton = CreateWindowEx( 0, "BUTTON", "Execute", WS_CHILD | WS_VISIBLE, 660, 320, 100, 30, hwnd,( HMENU ) ID_BUTTON1, hThisInstance, NULL );

Fragment funkcji obsługującej komunikaty:
C/C++
case WM_COMMAND:
if( wParam == ID_BUTTON1 )
{
    int czydobrze = 0;
   
    czydobrze = GetWindowText( hCommandLine, CommandLineBuf, 50 );
    std::cout << czydobrze << std::endl;
    SetDlgItemText( hwnd, ID_STATICTEXTBOX1, CommandLineBuf );
    /* ComandLineBuf jest typu LPSTR i jest zadeklarowany globalnie */
}

Póki co program ma działać tak: ja wpisuję tekst do EDIT-a, klikam na przycisk i ten tekst wędruje do STATIC-a. Dodatkowo w konsoli wypisywana jest wartość zwracana przez
GetWindowText()
. Założenie, że w textboksie znajdzie się nie więcej niż 50 znaków jest chwilowym uproszczeniem ;)

Problem w tym, że
GetWindowText()
 zawsze zwraca 0 co oznacza bład. Próbowałem też
GetLastError()
 - zwracał 0.
P-113440
Monika90
» 2014-07-07 19:28:51
Czy jesteś pewien, że hCommandLine tutaj
C/C++
HWND hCommandLine = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 290, 763, 20, hwnd, NULL, hThisInstance, NULL );
i tutaj
C/C++
czydobrze = GetWindowText( hCommandLine, CommandLineBuf, 50 );
to ta sama zmienna? Bo nie wygląda na to...
P-113447
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-07 20:41:38
to ta sama zmienna? Bo nie wygląda na to...
Przeanalizowałem jeszcze raz kod i nie rozumiem.. Mają taki sam typ i taką samą nazwę więc chyba te same. Zapomniałem dodać, że hCommandLine jest zadeklarowana globalnie.
P-113463
Monika90
» 2014-07-07 20:54:59
Mają ten sam typ, tę samą nazwę, ale to dwie różne zmienne. Jedna jest globalna, a druga lokalna, ta lokalna jest dostępna tylko wewnątrz funkcji w której jest zadeklarowana, i zasłania tę globalną. To są podstawy C++, może zostaw na razie WinAPI i zajmij się podstawami.
P-113466
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-07 22:28:53
Czyli jeśli zadeklaruję
HWND hCommandLine
 globalnie a potem napiszę w WinMain
C/C++
hCommandLine = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "tekst do odczytu", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 290, 763, 20, hwnd, NULL, hThisInstance, NULL );
to nie mam szans, żeby potem przy obsłudze komunikatów odczytać ze zmiennej to co "dopisałem" w WinMain?

Mam nadzieję, że rozumiesz o co chodzi.
P-113474
pekfos
» 2014-07-07 22:31:13
to nie mam szans, żeby potem przy obsłudze komunikatów odczytać ze zmiennej to co "dopisałem" w WinMain?
Niby dlaczego?
P-113475
Vister26
Temat założony przez niniejszego użytkownika
» 2014-07-07 22:38:52
Nie wiem, ale gdy tak zrobię, to nadal nie działa i zwraca 0. Całkiem przez to zgłupiałem, już mi się podstawowe rzeczy mylą.
P-113481
libed
» 2014-07-07 23:15:20
A na MSDN kolega zaglądał? Jest tam wypisane w jakich przypadkach GetWindowText zwraca 0. Może być to spowodowane m.in nieprawidłowym uchwytem. Możesz porównać czy uchwyt używany w bloku WM_COMMAND jest identyczny z tym tworzonym wcześniej używając funkcji GetDlgItem( HWND_Rodzica, ID_okna/kontrolki ).
P-113484
« 1 » 2
  Strona 1 z 2 Następna strona