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

Wyświetlenie tekstu za pomocą SetWindowText

Ostatnio zmodyfikowano 2013-12-31 21:11
Autor Wiadomość
Witness
Temat założony przez niniejszego użytkownika
Wyświetlenie tekstu za pomocą SetWindowText
» 2013-12-29 14:45:24
Czesc, mam maly problem z kodem z Kursu "Pliki" (Link : » Kurs WinAPI, C++ » PodstawyPliki lekcja)

Kopiuje nastepujacy Code do mojego Programu, ale nie wyswietla mi niestety napis, ktory zapisalem w pliku "test.txt".

C/C++
LPSTR Bufor;
DWORD dwRozmiar, dwPrzeczyt;
HANDLE hPlik;

hPlik = CreateFile( "test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL );
if( hPlik == INVALID_HANDLE_VALUE ) {
    MessageBox( NULL, "Nie można otworzyć pliku.", "A to pech!", MB_ICONEXCLAMATION );
    PostQuitMessage( 0 ); // Zakończ program
}

dwRozmiar = GetFileSize( hPlik, NULL );
if( dwRozmiar == 0xFFFFFFFF ) {
    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!", "Ale wiocha...", MB_ICONEXCLAMATION );
    PostQuitMessage( 0 ); // Zakończ program
}

if( !ReadFile( hPlik, Bufor, dwRozmiar, & dwPrzeczyt, NULL ) ) {
    MessageBox( NULL, "Błąd czytania z pliku", "Dupa blada!", MB_ICONEXCLAMATION );
    PostQuitMessage( 0 ); // Zakończ program
}

Bufor[ dwRozmiar ] = 0; // dodaj zero na końcu stringa
SetWindowText( hwnd, Bufor ); // zrób coś z tekstem, np. wyświetl go

GlobalFree( Bufor ); // Zwolnij bufor
CloseHandle( hPlik ); // Zamknij plik
P-100494
pekfos
» 2013-12-29 15:33:21
Podaj cały kod.
P-100516
Witness
Temat założony przez niniejszego użytkownika
» 2013-12-29 16:44:16
C/C++
#include <windows.h>
#include <tchar.h>
#include <windowsx.h> // do ComboBox_GetCurSel

LPCWSTR NazwaKlasy = _T( "Klasa Okienka" );
MSG Komunikat;
HWND hwnd;
HWND g_hPrzycisk;
HWND g_hPrzycisk_innyStyl;
HWND g_hpoleTextowe;
HWND hCombo;
bool Przyc = false;

#define ID_PRZYCISK_1 500
#define ID_PRZYCISK_2 501
#define ID_COMBOBOX 502

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

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
   
    // STRUKTURA OKNA
    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 = NazwaKlasy;
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    if( !RegisterClassEx( & wc ) )
    {
        MessageBox( NULL,
        _T( "Wysoka Komisja odmawia rejestracji tego okna!" ),
        _T( "Niestety!" ),
        MB_ICONEXCLAMATION | MB_OK );
        return 0;
    }
   
   
   
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE,
    NazwaKlasy,
    _T( "Oto okiento" ),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    500, 500, NULL, NULL, hInstance,
    NULL );
   
   
    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
   
    // Przyciski etc. (ZWASZE PO CREATOWANIU OKNA!!!!!)
    g_hPrzycisk = CreateWindowEx( 0, _T( "Button" ), _T( "Nasz przycisk" ), WS_CHILD | WS_VISIBLE,
    100, 100, 150, 30, hwnd,( HMENU ) ID_PRZYCISK_1, hInstance, NULL );
    g_hPrzycisk_innyStyl = CreateWindowEx( 0, _T( "BUTTON" ), _T( "Onet" ), WS_CHILD | WS_VISIBLE | BS_CHECKBOX,
    25, 150, 150, 30, hwnd,( HMENU ) ID_PRZYCISK_2, hInstance, NULL );
   
    //Czcionka
    HFONT hNormalFont =( HFONT ) GetStockObject( DEFAULT_GUI_FONT );
    SendMessage( g_hPrzycisk, WM_SETFONT,( WPARAM ) hNormalFont, 0 );
   
    //Pole textowe
    g_hpoleTextowe = CreateWindowEx( WS_EX_CLIENTEDGE, _T( "EDIT" ), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER
    | ES_MULTILINE // lamanie linijek 
    | ES_AUTOVSCROLL // przewijanie w pionie
    | WS_VSCROLL, // dodanie pionowego paska przewijania
    50, 50, 150, 50,
    hwnd, NULL, hInstance, NULL );
    // ustawianie tekstu w naszym polu tekstowym z pomoca... SetWindowText()
    // zwasze zaraz po rozkazie utworzenia pola
    SetWindowText( g_hpoleTextowe, _T( "Prosze o wpis..." ) );
    // oraz zapisywanie wpisanego textu
    // napierw oszacowanie dlugoci textu
    DWORD dlugosc = GetWindowTextLength( g_hpoleTextowe );
    // dynamiczne alokowanie pamieci
    LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
    GetWindowText( g_hpoleTextowe,( LPWSTR ) Bufor, dlugosc + 1 );
    // zwalnianie pamieci gdy ta nie jest juz potrzebna
    GlobalFree( Bufor );
   
    // LISTY
    HWND hListBox = CreateWindowEx( WS_EX_CLIENTEDGE, _T( "LISTBOX" ), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
    5, 200, 150, 100, hwnd, NULL, hInstance, NULL );
    // dodawanie elementow do listy
    SendMessage( hListBox, LB_ADDSTRING, 0,( LPARAM ) "Element 1" );
    SendMessage( hListBox, LB_ADDSTRING, 0,( LPARAM ) "Element 2" );
   
    // LISTY ROZWIJALNE, CZYLI COMBOBOX
    hCombo = CreateWindowEx( WS_EX_CLIENTEDGE, _T( "COMBOBOX" ), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER
    | CBS_DROPDOWN, // trzeba dodac bo inczej wyglada chujowo!, pozatym waznynm jest, ze CBS_DROPDOWNLIST <<<<------ jest lepsze!!!!
    5, 310, 150, 200, hwnd,( HMENU ) ID_COMBOBOX, hInstance, NULL );
    // dodawanie elementow do list tak jak w normalnej liscie
    SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "Element 1" );
    SendMessage( hCombo, CB_ADDSTRING, 0,( LPARAM ) "Element 2" );
   
    if( hwnd == NULL )
    {
        MessageBox( NULL,
        _T( "Okno odmowilo przyjscia na swiat" ),
        _T( "Ale kicha!" ), MB_ICONEXCLAMATION
        );
        return 1;
    }
   
   
    // PETLA
    while( GetMessage( & Komunikat, NULL, 0, 0 ) ) {
        TranslateMessage( & Komunikat );
        DispatchMessage( & Komunikat );
    }
   
    // ODCZYT W PLIKU
    LPSTR Bufor_2;
    DWORD dwRozmiar, dwPrzeczyt;
    HANDLE hPlik;
   
    hPlik = CreateFile( _T( "test.txt" ), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL );
    if( hPlik == INVALID_HANDLE_VALUE ) {
        MessageBox( NULL, _T( "Nie można otworzyć pliku." ), _T( "A to pech!" ), MB_ICONEXCLAMATION );
        PostQuitMessage( 0 ); // Zakończ program
    }
   
    dwRozmiar = GetFileSize( hPlik, NULL );
    if( dwRozmiar == 0xFFFFFFFF ) {
        MessageBox( NULL, _T( "Nieprawidłowy rozmiar pliku!" ), _T( "Niedobrze..." ), MB_ICONEXCLAMATION );
        PostQuitMessage( 0 ); // Zakończ program
    }
   
    Bufor_2 =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 );
    if( Bufor_2 == NULL ) {
        MessageBox( NULL, _T( "Za mało pamięci!" ), _T( "Ale wiocha..." ), MB_ICONEXCLAMATION );
        PostQuitMessage( 0 ); // Zakończ program
    }
   
    if( !ReadFile( hPlik, Bufor_2, dwRozmiar, & dwPrzeczyt, NULL ) ) {
        MessageBox( NULL, _T( "Błąd czytania z pliku" ), _T( "Dupa blada!" ), MB_ICONEXCLAMATION );
        PostQuitMessage( 0 ); // Zakończ program
    }
   
    Bufor_2[ dwRozmiar ] = 0; // dodaj zero na końcu stringa
    SetWindowText( hwnd,( LPCWSTR ) Bufor_2 ); // zrób coś z tekstem, np. wyświetl go
   
    GlobalFree( Bufor_2 ); // Zwolnij bufor
    CloseHandle( hPlik ); // Zamknij plik
    return Komunikat.wParam;
}



LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    // sprawdzanie wybranej opcji w Combobox
    int numer = ComboBox_GetCurSel( hCombo ); // include <windowsx.h>
    int dlugosc = ComboBox_GetTextLength( hCombo );
    LPSTR NapiszComboBoxa =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 );
    ComboBox_GetText( hCombo,( LPWSTR ) NapiszComboBoxa, dlugosc + 1 );
    //Ta opcja zostanie ujawniona po przycisnieciu Buttona "Nasz Przycisk" na dole
   
   
    switch( msg )
    {
        //Program do Rysownia
        /*case WM_LBUTTONDOWN:
        {
        Przyc = true;
        SendMessage(hwnd, WM_MOUSEMOVE, wParam, lParam);
        }
        break;
        case WM_LBUTTONUP:
        Przyc = false;
        break;
        case WM_MOUSEMOVE:
        if(Przyc)
        {
        // KURSOR -> Klepsydra
        HCURSOR StaryKursor;
        StaryKursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
        // Rysowanie
        HDC hdc = GetDC(hwnd);
        SetPixel(hdc, LOWORD(lParam), HIWORD(lParam), RGB(255,0,0));
        ReleaseDC(hwnd, hdc);
        }
        break;*/
        // KONIEC : Program do Rysownia
    case WM_COMMAND:
        switch( wParam )
        {
        case ID_PRZYCISK_1:
            MessageBox( hwnd,( LPCWSTR ) NapiszComboBoxa, // zaznaczona opcja ComboBoxa
            _T( "Ha!" ), MB_ICONINFORMATION );
            break;
        case ID_PRZYCISK_2:
            BOOL bChecked =( IsDlgButtonChecked( hwnd, ID_PRZYCISK_2 ) == BST_CHECKED );
            if( bChecked ) CheckDlgButton( hwnd, ID_PRZYCISK_2, BST_UNCHECKED );
           
            CheckDlgButton( hwnd, ID_PRZYCISK_2, BST_CHECKED );
            break;
        }
        break;
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        // Klawiatura
    case WM_KEYDOWN:
        {
            switch(( int ) wParam )
            {
            case VK_RETURN: // ENTER
                MessageBox( hwnd, _T( "Wcisnieto Enter!" ), _T( "HA!" ), MB_ICONINFORMATION );
                break;
            case VK_ESCAPE:
                DestroyWindow( hwnd );
                break;
            }
           
        }
        // Koniec klawiatury
       
        // Mieszanka: Klawiatury i Myszki
    case WM_LBUTTONDOWN:
        { // komunikaty wyjda, tylko jezeli Ctrl zostal nacisniety, przed kliknieciem myszki
            if( wParam & MK_CONTROL )
                 MessageBox( hwnd, _T( "Wcisniety jest Ctrl !" ), NULL, MB_ICONINFORMATION );
           
            if( wParam & MK_SHIFT )
                 MessageBox( hwnd, _T( "Wcisniety jest Shift!" ), NULL, MB_ICONINFORMATION );
           
        }
        break;
        // KONIEC: Mieszanki...
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
    return 0;
}


// mysle ze przyczyna jest funkcja SetWindowText(Bufor);
P-100529
pekfos
» 2013-12-29 16:51:32
Po zniszczeniu okna niczego w nim nie wyświetlisz.
P-100531
Witness
Temat założony przez niniejszego użytkownika
» 2013-12-29 17:24:03
Ok, dzieki znalazlem swoj blad. ;)

Jeszcze tylko male pytanko. Nie rozumiem dlaczego, przy odczytywaniu pliku trzeba dodac to dziwne "0" na koniec Bufora:
C/C++
Bufor_2[ dwRozmiar ] = 0; // dodaj zero na końcu stringa
P-100545
Pokropow
znak null na końcu str
» 2013-12-29 17:25:51
Stringi zawsze są zakończone zerem np: "abc" oznacza {'a','b','c',0}. Po prostu Windows wyświetla string (tekst) aż napotka 0 (czyli znak NULL)
P-100547
Witness
Temat założony przez niniejszego użytkownika
» 2013-12-31 21:11:31
ok, dzieki
P-100795
« 1 »
  Strona 1 z 1