gosc2505 Temat założony przez niniejszego użytkownika |
WinAPI zapis tekstu do pliku » 2009-08-17 23:19:13 Cześć, mogłby ktoś mi pomóc przerabiając moj kod tak zeby zapisywal tekst z kontrolki hEdit do pliku? Umiem odczytywac informacje z plikow ale zapis cos nie wychodzi :P ponizej zamieszczam "czysty" :) fragment mojego kodu z dwoma kontrolkami (ale dziala jakby ktos chcial kompilowac). Wszelkie rady i sugestie co zle robie mile widziane, dzieki i pozdrawiam. EDIT:nie wiem jak kod sie na tym forum umieszcza w tagach <code>? #define _WIN32_IE 0x0600 #include <windows.h> #include <commctrl.h> LPSTR NazwaKlasy = "Notatniczek"; MSG msg; HWND hEdit, hButton;
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil ) { 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 = CreateSolidBrush( RGB( 33, 99, 255 ) );; wc.lpszMenuName = NULL; wc.lpszClassName = NazwaKlasy; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "zzz", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Notatniczek", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, "nie da rady", "...", MB_ICONEXCLAMATION ); return 1; } hEdit = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 5, 5, 200, 100, hwnd, NULL, hInstance, NULL ); hButton = CreateWindowEx( 0, "BUTTON", "zapisz", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 120, 120, 25, hwnd,( HMENU ) 1, hInstance, NULL ); ShowWindow( hwnd, nFunsterStil ); while( GetMessage( & msg, NULL, 0, 0 ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } return msg.wParam; }
bool WczytajPlik( HWND hEdit, LPSTR nazwapliku ) { HANDLE hPlik; bool udalo_sie = false; hPlik = CreateFile( nazwapliku, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0 ); if( hPlik != INVALID_HANDLE_VALUE ) { DWORD rozmiar_pliku; rozmiar_pliku = GetFileSize( hPlik, NULL ); if( rozmiar_pliku != 0xFFFFFFFF ) { LPSTR tekst_pliku; tekst_pliku =( LPSTR ) GlobalAlloc( GPTR, rozmiar_pliku + 1 ); if( tekst_pliku != NULL ) { DWORD odczytane; if( ReadFile( hPlik, tekst_pliku, rozmiar_pliku, & odczytane, NULL ) ) { tekst_pliku[ rozmiar_pliku ] = 0; if( SetWindowText( hEdit, tekst_pliku ) ) udalo_sie = true; } GlobalFree( tekst_pliku ); } } CloseHandle( hPlik ); } return udalo_sie; }
LRESULT CALLBACK WndProc( HWND hwnd, UINT mesg, WPARAM wParam, LPARAM lParam ) { switch( mesg ) { case WM_COMMAND: { switch( wParam ) { case 1: OPENFILENAME ofn; char sNazwaPliku[ MAX_PATH ] = ""; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.lpstrFilter = "Pliki tekstowe (*.txt)\0*.txt\0Wszystkie pliki\0*.*\0"; ofn.nMaxFile = MAX_PATH; ofn.lpstrFile = sNazwaPliku; ofn.lpstrDefExt = "txt"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if( GetOpenFileName( & ofn ) ) { WczytajPlik( hEdit, sNazwaPliku ); } break; } break; } case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, mesg, wParam, lParam ); } return 0; }
BOOL CALLBACK DlgProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { switch( Msg ) { case WM_COMMAND: { switch( LOWORD( wParam ) ) { case IDOK: EndDialog( hwnd, IDOK ); break; case IDCANCEL: EndDialog( hwnd, IDCANCEL ); break; } } break; default: return FALSE; } return TRUE; } |
pixelmaster |
» 2009-08-17 23:30:53 coś takiego powinno działać hOknoText to kontrolka edit bool ZapiszPlik( LPSTR sNazwaPliku, HWND hOknoText ) { LPSTR Bufor; DWORD dwRozmiar, dwZapisane; HANDLE hPlikz; bool udalo_sie = false; hPlikz = CreateFile( sNazwaPliku, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); if( hPlikz != INVALID_HANDLE_VALUE ) { dwRozmiar = GetWindowTextLength( hOknoText ); if( dwRozmiar == 0 ) { MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 ); if( Bufor == NULL ) { MessageBox( NULL, "Za mało pamięci!", "Dupa blada...", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } GetWindowText( hOknoText, Bufor, dwRozmiar + 1 ); if( !WriteFile( hPlikz, Bufor, dwRozmiar, & dwZapisane, NULL ) ) { MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION ); PostQuitMessage( 0 ); } GlobalFree( Bufor ); CloseHandle( hPlikz ); } return udalo_sie; } Tagi na forum -> http://forum.ddt.pl/?Tid=622PS. Temat nie powinien się czasem nazywać "WinAPI zapis do pliku" ? PS2. Chyba lepiej będzie jak definicję funkcji wyżucisz przed main |