Zdziwiony Temat założony przez niniejszego użytkownika |
Jak 'uwidocznić' zmienną ? » 2013-12-21 19:20:54 Witam mam taki oto kod: 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 );
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 ); UpdateWindow( hwnd );
while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
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: 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 );
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 ); UpdateWindow( hwnd );
while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
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 ? |
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: 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 );
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 ); UpdateWindow( hwnd );
while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
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ąć :) |