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

WinAPI zapis tekstu do pliku

Ostatnio zmodyfikowano 2009-08-18 00:13
Autor Wiadomość
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>?

C/C++
#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;
}

//Procedura dialogowa
BOOL CALLBACK DlgProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
    switch( Msg )
    {
    case WM_COMMAND:
        {
            //reakcja na przyciski
            switch( LOWORD( wParam ) )
            {
            case IDOK: EndDialog( hwnd, IDOK ); break;
            case IDCANCEL: EndDialog( hwnd, IDCANCEL ); break;
            }
        }
        break;
        default: return FALSE;
    }
    return TRUE;
}

P-9581
pixelmaster
» 2009-08-17 23:30:53
coś takiego powinno działać hOknoText to kontrolka edit
C/C++
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 ); //Zakończ program
        }
       
        Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 );
        if( Bufor == NULL )
        {
            MessageBox( NULL, "Za mało pamięci!", "Dupa blada...", MB_ICONEXCLAMATION );
            PostQuitMessage( 0 ); //Zakończ program
        }
        GetWindowText( hOknoText, Bufor, dwRozmiar + 1 ); //skopiuj do bufora tekst z jakiegoś okna
       
        if( !WriteFile( hPlikz, Bufor, dwRozmiar, & dwZapisane, NULL ) )
        {
            MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION );
            PostQuitMessage( 0 ); //Zakończ program
        }
       
        GlobalFree( Bufor ); //Zwolnij bufor
        CloseHandle( hPlikz ); //Zamknij plik            
    }
    return udalo_sie;
}

Tagi na forum -> http://forum.ddt.pl/?Tid=622

PS. Temat nie powinien się czasem nazywać "WinAPI zapis do pliku" ?
PS2. Chyba lepiej będzie jak definicję funkcji wyżucisz przed main
P-9582
gosc2505
Temat założony przez niniejszego użytkownika
» 2009-08-18 00:13:20
Wielkie dzięki za szybka odpowiedz i za edycje, teraz wszystko działa, przerobiłem jeszcze switcha i gitara jest.
Mam podobna funkcje do zapisu ale sam pisałem i chyba jakieś flagi pomyliłem, jutro bliżej popatrzę.
Sory za błędy - zmęczył mnie dev c++ :P, idę spać.
P-9583
« 1 »
  Strona 1 z 1