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

Jak 'uwidocznić' zmienną ?

Ostatnio zmodyfikowano 2013-12-21 20:51
Autor Wiadomość
Zdziwiony
Temat założony przez niniejszego użytkownika
Jak 'uwidocznić' zmienną ?
» 2013-12-21 19:20:54
Witam mam taki oto kod:
C/C++
// TWORZENIE OKNA
HWND hwnd;

hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Notatnik v0.1", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 700, 500, NULL, NULL, hInstance, NULL );
//
g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE,
1, 100, 150, 30, hwnd, NULL, hInstance, NULL );
//pole tekstowe
HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 100, 1, 680, 500, hwnd, NULL, hInstance, NULL );
//

DWORD dlugosc = GetWindowTextLength( hText );
LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
GetWindowText( hText, Bufor, dlugosc + 1 );



if( hwnd == NULL )
{
    MessageBox( NULL, "Blad inicjalizacji programu!", "Blad!", MB_ICONEXCLAMATION );
    return 1;
}

ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
UpdateWindow( hwnd );

// 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 )
    {
        std::string Bufor2;
        Bufor2 = Bufor;
        std::string nazwa;
        nazwa = "pliktest.txt";
        std::ofstream plik( nazwa.c_str(), std::ios::out );
        std::string napis;
        plik.write( & napis[ 0 ], Bufor2.length() );
        plik.close();
    }
    break;
   
    default:
    return DefWindowProc( hwnd, msg, wParam, lParam );
}

return 0;
}

Lub inny zapis:
C/C++
// TWORZENIE OKNA
HWND hwnd;

hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Notatnik v0.1", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 700, 500, NULL, NULL, hInstance, NULL );
//
g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE,
1, 100, 150, 30, hwnd, NULL, hInstance, NULL );
//pole tekstowe
HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 100, 1, 680, 500, hwnd, NULL, hInstance, NULL );
//
std::string Bufor2;
DWORD dlugosc = GetWindowTextLength( hText );
LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
GetWindowText( hText, Bufor, dlugosc + 1 );
Bufor2 = Bufor;



if( hwnd == NULL )
{
    MessageBox( NULL, "Blad inicjalizacji programu!", "Blad!", MB_ICONEXCLAMATION );
    return 1;
}

ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
UpdateWindow( hwnd );

// 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 )
    {
        std::string nazwa;
        nazwa = "pliktest.txt";
        std::ofstream plik( nazwa.c_str(), std::ios::out );
        std::string napis;
        plik.write( & napis[ 0 ], Bufor2.length() );
        plik.close();
    }
    break;
   
    default:
    return DefWindowProc( hwnd, msg, wParam, lParam );
}

return 0;
}

W obydwóch przypadkach komplinator twierdzi że zmienna Bufor i Bufor2 nie istnieją... w miejscu:        
plik.write( & napis[ 0 ], Bufor2.length() );
 )

I tu nasuwa się moje pytanie... co zrobić, żeby zmienna Bufor oraz Bufor2 były widoczne w CAŁYM programie, a nie tyko do obsługi zdarzeń ? (oczywiście bez niej włącznie..)
Chcę, aby program z pola tekstowego zapisał dane do pliku.txt, na razie udało mi się tylko utworzyć plik.txt, a z zapisem danych do niego po kliknięciu przycisku mam problem ;/

Pozdrawiam i proszę o pomoc.

EDIT:
Dam loga z komplinacji:
C:\Users\Łukasz\Desktop\Projekt\Notatnik\main.cpp: In function 'LRESULT WndProc(HWND, UINT, WPARAM, LPARAM)':
C:\Users\Łukasz\Desktop\Projekt\Notatnik\main.cpp:91:18: error: 'Bufor' was not declared in this scope
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 1 warnings (0 minutes, 0 seconds)

EDIT2:
Pomoże ktoś ?
Źle zapisałem, czy po prostu nie można używac <fstream> w WinAPI ?
P-99761
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2013-12-21 20:21:49
Dobra nikt nie pomógł, ale jakos sam sobie poradziłem :P

Zrobiłem coś takiego:

C/C++
HWND hwnd;

hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Notatnik v0.1", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 700, 500, NULL, NULL, hInstance, NULL );
//
g_hPrzycisk = CreateWindowEx( 0, "BUTTON", "Nasz przycisk", WS_CHILD | WS_VISIBLE,
1, 100, 150, 30, hwnd, NULL, hInstance, NULL );
//pole tekstowe
hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 100, 1, 680, 500, hwnd, NULL, hInstance, NULL );
//

if( hwnd == NULL )
{
    MessageBox( NULL, "Blad inicjalizacji programu!", "Blad!", MB_ICONEXCLAMATION );
    return 1;
}

ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
UpdateWindow( hwnd );

// 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 )
    {
        zapisz();
    }
    break;
   
    default:
    return DefWindowProc( hwnd, msg, wParam, lParam );
}

return 0;
}
void zapisz()
{
DWORD dlugosc = GetWindowTextLength( hText );
LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
GetWindowText( hText, Bufor, dlugosc + 1 );
std::string Bufor2;
Bufor2 = Bufor;
std::string nazwa;
nazwa = "pliktest.txt";
std::ofstream plik( nazwa.c_str() );
std::fstream plik2( nazwa.c_str(), std::ios::out );
plik << Bufor;
plik.close();
}


Powiedzcie tylko czy składnia poprawna i można zamknąć :)
P-99764
pekfos
» 2013-12-21 20:51:33
Powiedzcie tylko czy składnia poprawna
Kompiluje się?
P-99765
« 1 »
  Strona 1 z 1