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

WinApi - Wyświetlanie tekstu z pliku w polu tekstowym

Ostatnio zmodyfikowano 2014-03-21 18:01
Autor Wiadomość
Samurajewo
Temat założony przez niniejszego użytkownika
WinApi - Wyświetlanie tekstu z pliku w polu tekstowym
» 2014-03-21 17:36:22
Piszę sobie prosty notatnik w ramach nauki WinApi. Dla przetestowania obsługi plików chcę pobrać tekst z pliku i wyświetlić go w polu tekstowym. Wszystko ładnie się kompiluje i odpala, ale tekst się nie wyświetla. Nie jestem w stanie znaleźć przyczyny więc zwracam się z prośbą o pomoc. Oto kod:

C/C++
#include <windows.h>
#include "resources.hpp"
#include "commctrl.h"

//ZMIENNE GLOBALNE
LPSTR YourPadClass = "YourPad Class";
MSG Message;

LRESULT CALLBACK WindowProcess( HWND YourPadWnd, UINT msg, WPARAM wParam, LPARAM lParam );

//WAŻNE ZMIENNE
WNDCLASSEX yPW;
HWND YourPadWnd;
HWND hPole;
HMENU hMenu;
HACCEL hAccelerators;

int WINAPI WinMain( HINSTANCE hYourPadId, HINSTANCE hYourPadIdPrev, LPSTR lpCmdLine, int nCmdShow ) {
   
    //REJESTRACJA KLASY OKNA
    yPW.cbSize = sizeof( WNDCLASSEX );
    yPW.style = 0;
    yPW.lpfnWndProc = WindowProcess;
    yPW.cbClsExtra = 0;
    yPW.cbWndExtra = 0;
    yPW.hInstance = hYourPadId;
    yPW.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    yPW.hCursor = LoadCursor( NULL, IDC_ARROW );
    yPW.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    yPW.lpszClassName = YourPadClass;
    yPW.lpszMenuName = NULL;
    yPW.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
   
    //KOMUNIKAT O BŁĘDZIE
    if( !RegisterClassEx( & yPW ) ) {
        MessageBox( NULL, "Can't open YourPad", "Error", MB_ICONERROR | MB_OK );
        return 1;
    }
   
    //TWORZENIE MENU
    hMenu = LoadMenu( hYourPadId, MAKEINTRESOURCE( 200 ) );
   
    //DODAWANIE SKRÓTÓW
    hAccelerators = LoadAccelerators( hYourPadId, MAKEINTRESOURCE( IDR_ACCELERATORS ) );
   
    //TWORZENIE OKNA GŁÓWNEGO
    YourPadWnd = CreateWindowEx( WS_EX_WINDOWEDGE, YourPadClass, "YourPad", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 590, NULL, hMenu, hYourPadId, NULL );
   
    //TWORZENIE KONTROLEK
    hPole = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 600, YourPadWnd, NULL, hYourPadId, NULL );
    //PLIK
    HANDLE g_hPlik = CreateFile( "C:\Documents and Settings\Administrator\Pulpit\Minecraft\WinAPi\plik.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    if( g_hPlik == INVALID_HANDLE_VALUE ) {
        MessageBox( YourPadWnd, "Something goes wrong!!!", "Error!", MB_ICONERROR );
    }
    else {
       
        DWORD dwSize = GetFileSize( g_hPlik, NULL );
        if( dwSize == 0xFFFFFFFF ) {
            MessageBox( YourPadWnd, "Something goes wrong!!!", "Error!", MB_ICONERROR );
        }
        else {
            LPSTR bufor;
            bufor =( LPSTR ) GlobalAlloc( GPTR, dwSize );
           
            DWORD plikPrzeczyt;
            ReadFile( g_hPlik, bufor, dwSize, & plikPrzeczyt, NULL );
           
            bufor[ dwSize ] = 0;
            SetWindowText( hPole, bufor );
           
            GlobalFree( bufor );
            CloseHandle( g_hPlik );
        }
    }
    //KOMUNIKAT O BŁĘDZIE
    if( YourPadWnd == NULL ) {
        MessageBox( NULL, "Can't open a window", "Error", MB_ICONERROR );
        return 1;
    }
   
    if( !hAccelerators ) {
        MessageBox( YourPadWnd, "Can't load accelerators!!!", NULL, MB_ICONERROR );
    }
   
    //UWIDACZNIANIE OKNA
    ShowWindow( YourPadWnd, nCmdShow );
    UpdateWindow( YourPadWnd );
   
    //PĘTLA KOMUNIKATÓW
    while( GetMessage( & Message, NULL, 0, 0 ) ) {
        if( !TranslateAccelerator( YourPadWnd, hAccelerators, & Message ) )
             TranslateMessage( & Message );
       
        DispatchMessage( & Message );
    }
   
    return Message.wParam;
   
    return 0;
}


LRESULT CALLBACK WindowProcess( HWND YourPadWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {
    switch( msg ) {
    case WM_CLOSE:
        DestroyWindow( YourPadWnd );
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
    case WM_COMMAND: {
            if( LOWORD( wParam ) == MENU_ITEM_ESCAPE )
                 PostQuitMessage( 0 );
           
            if( LOWORD( wParam ) == MENU_ITEM_DELETE )
                 SetWindowText( hPole, "" );
           
        }
        break;
        default:
        return DefWindowProc( YourPadWnd, msg, wParam, lParam );
        break;
    }
    return 0;
}
P-106928
Monika90
» 2014-03-21 18:01:02
W nazwach plików nie używa się takich znaczków \ bo mają one znaczenie specjalne, trzeba używać takich /
Jeżeli kompilator ci o tym nie powiedział, to kup se lepszy kompilator.
P-106930
« 1 »
  Strona 1 z 1