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

Funkcja GetWindowsText WinApi

Ostatnio zmodyfikowano 2016-12-26 21:04
Autor Wiadomość
Krzychu97
Temat założony przez niniejszego użytkownika
Funkcja GetWindowsText WinApi
» 2016-12-26 01:15:14
Witam!
Chciałbym aby program działał tak, że po naciśnięciu przycisku "Start" wyświetli mi się okno z napisem wprowadzonym do pola tekstowego. Niestety z nieznanych dla mnie przyczyn komunikat wyświetla się pusty. Proszę Was o pomoc i dziękuje za poświęcony czas.

C/C++
#include <windows.h>
#include <string>

using namespace std;

HWND g_hPrzycisk;
HWND g_hPrzycisk2;
HWND hText;

LPSTR Bufor;

MSG Komunikat;

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
    // WYPE£NIANIE STRUKTURY
    WNDCLASSEX wc;
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "OKNO";
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    // REJESTROWANIE KLASY OKNA
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    // TWORZENIE OKNA
    HWND hwnd;
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "OKNO", "Nazwa", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 900, 600, NULL, NULL, hInstance, NULL );
   
    if( hwnd == NULL )
    {
        MessageBox( NULL, "Okno odmówi³o przyjœcia na œwiat!", "Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    ShowWindow( hwnd, nCmdShow ); // Poka¿ okienko...
    UpdateWindow( hwnd );
   
    g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Start", WS_CHILD | WS_VISIBLE,
    100, 450, 150, 30, hwnd, NULL, hInstance, NULL );
   
    g_hPrzycisk2 = CreateWindowEx( 0, "BUTTON", "Wyjscie", WS_CHILD | WS_VISIBLE,
    650, 450, 150, 30, hwnd, NULL, hInstance, NULL );
   
    HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
    50, 50, 150, 20, hwnd, NULL, hInstance, NULL );
   
   
   
    // Pêtla komunikatów
    while( GetMessage( & Komunikat, NULL, 0, 0 ) )
    {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
    return Komunikat.wParam;
}

// OBS£UGA ZDARZEÑ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
    case WM_COMMAND:
        {
            if(( HWND ) lParam == g_hPrzycisk )
            {
                GetWindowText( hText, Bufor, 256 );
                MessageBox( hwnd, Bufor, "Komunikat", MB_OK );
            }
            if(( HWND ) lParam == g_hPrzycisk2 )
            {
                DestroyWindow( hwnd );
            }
            break;
        }
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-155439
j23
» 2016-12-26 11:11:23
Na co wskaźnik Bufor wskazuje?
P-155444
Krzychu97
Temat założony przez niniejszego użytkownika
» 2016-12-26 19:02:39
Wskaźnik? Bufor to zmienna która ma u mnie przechować wprowadzony tekst.
P-155459
j23
» 2016-12-26 19:37:28
Tak, wskaźnik. LPSTR jest typem wskaźnikowym (alias dla char*), jak wszystkie windowsowe typy zaczynające się od LP (long pointer?). Zrób Bufor tablicą char[256].
P-155463
Krzychu97
Temat założony przez niniejszego użytkownika
» 2016-12-26 19:44:37
Zrobiłem jak kazałeś, ale nadal mam puste okno.

C/C++
char Bufor[ 256 ]; //na początku przed int WINAPI WinMain


//przy obsłudze komunikatów
case WM_COMMAND:
{
    if(( HWND ) lParam == g_hPrzycisk )
    {
        GetWindowText( hText, Bufor, 256 );
        MessageBox( hwnd, Bufor, "Komunikat", MB_OK );
    }
    if(( HWND ) lParam == g_hPrzycisk2 )
    {
        DestroyWindow( hwnd );
    }
    break;
}
P-155465
j23
» 2016-12-26 20:00:16
No a co zwraca GetWindowText?
P-155467
Krzychu97
Temat założony przez niniejszego użytkownika
» 2016-12-26 20:05:01
W kursie z tej strony nie ma informacji więc poszukałem gdzie indziej. Funkcja GetWindowText zwraca  długość wprowadzonego tekstu jeśli jej użycie się powiedzie. Czy powinienem użyć innej funkcji do pobrania tekstu?
P-155468
j23
» 2016-12-26 20:11:04
Heh, ja się pytałem, co konkretnie zwraca ta funkcja w Twoim programie po naciśnięciu przycisku;)


BTW, popraw warunki, bo przycisk może wysyłać WM_COMMAND dla innych notyfikacji:
C/C++
if(( HWND ) lParam == g_hPrzycisk && HIWORD( wParam ) == BN_CLICKED )
{...}
P-155469
« 1 » 2
  Strona 1 z 2 Następna strona