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: 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: 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 ); }
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. |
|
Monika90 |
» 2014-07-07 19:28:51 Czy jesteś pewien, że hCommandLine tutaj HWND hCommandLine = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 290, 763, 20, hwnd, NULL, hThisInstance, NULL );
i tutaj czydobrze = GetWindowText( hCommandLine, CommandLineBuf, 50 );
to ta sama zmienna? Bo nie wygląda na to... |
|
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. |
|
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. |
|
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 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. |
|
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? |
|
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ą. |
|
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 ).
|
|
« 1 » 2 |