krystian11102 Temat założony przez niniejszego użytkownika |
[C++] WinApi - Obsługa plików (Problem) » 2012-08-09 19:31:59 Witam, wziałem się za WinApi .. Tyle że doszedłem do plików ii.. Oto błąd przy kompulacji :
-------------- Build: Release in WinApek ---------------
Compiling: main1.cpp
C:\WinApek\main1.cpp:9:20: warning: deprecated conversion from string constant to 'LPSTR {aka char*}' [-Wwrite-strings]
C:\WinApek\main1.cpp: In function 'void zapis()':
C:\WinApek\main1.cpp:125:34: error: 'hwnd' was not declared in this scope
Process terminated with status 1 (0 minutes, 6 seconds)
1 errors, 1 warnings
--------------------------------------------------------
Chcę zrobić Okno w nim Pole Edit po kliknięciu przycisku tekst w polu ma się zapisać do pliku...
Oto Kod:
--------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include "keys.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
using namespace std;
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
void zapis();
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
HWND Przycisk1;
HWND Przycisk2;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// WYPE£NIANIE STRUKTURY
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, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
MB_ICONEXCLAMATION | MB_OK );
return 1;
}
HWND hwnd;
hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 400, NULL, NULL, hInstance, NULL );
HWND Pole=CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 10,10,150,50, hwnd, NULL, hInstance, NULL );
SetWindowText( Pole, "Wpisz tekst...");
DWORD dlugosc = GetWindowTextLength (Pole);
LPSTR Bufor = (LPSTR) GlobalAlloc (GPTR, dlugosc + 1);
GetWindowText (Pole, Bufor, dlugosc + 1);
Przycisk1 = CreateWindowEx( 0, "BUTTON", "Zapis", WS_CHILD | WS_VISIBLE, 10,60,150,30, hwnd, NULL, hInstance, NULL );
ShowWindow( hwnd, nCmdShow ); // Poka¿ okienko...
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_COMMAND:
if ((HWND) lParam == Przycisk1 )
zapis();
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return 0;
}
void zapis()
{
LPSTR Bufor;
DWORD dwRozmiar, dwZapisane;
HANDLE hPlik;
hPlik = CreateFile( "test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 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 = GetWindowTextLength( hwnd ); /<----------------------------TUTAJ ERROR/ *
//-------*******************************************************************************
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!", "Ale wiocha...", MB_ICONEXCLAMATION );
PostQuitMessage( 0 ); // Zakończ program
}
GetWindowText( hwnd, Bufor, dwRozmiar ); // skopiuj do bufora tekst z jakiegoś okna
Bufor[ dwRozmiar ] = 0; // dodaj zero na końcu stringa
if( !WriteFile( hPlik, 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( hPlik ); // Zamknij plik
}
Prosiłbym o szybką pomoc z góry dziękuję !
|