Działa. Bardzo dziękuję. Ten portal jest dla mnie głównym źródłem do nauki C++
Wystarczyło usunąć jedno HWND z main... takie proste:)
Tutaj poprawny kod, może w przyszłości komuś się przyda.
#include <windows.h>
#include <cstdlib>
#define ID_PRZYCISK1 501
#define ID_PRZYCISK2 502
#define ID_PRZYCISK_CANCEL 503
#define ID_TEXTBOX 504
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
HWND hText;
HWND hButton1, hButton2, hButton_cancel;
LPSTR Bufor;
DWORD dwRozmiar, dwZapisane;
HANDLE hPlik;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
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, "Program", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 600, NULL, NULL, hInstance, NULL );
if( hwnd == NULL )
{
MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
return 1;
}
HWND hButton1 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Pierwszy", WS_CHILD | WS_VISIBLE |
WS_BORDER, 5, 5, 150, 30, hwnd,( HMENU ) ID_PRZYCISK1, hInstance, NULL ),
hButton2 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Zapisz z pola do pliku", WS_CHILD | WS_VISIBLE |
WS_BORDER, 5, 40, 250, 30, hwnd,( HMENU ) ID_PRZYCISK2, hInstance, NULL );
hButton_cancel = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "Cancel", WS_CHILD | WS_VISIBLE |
WS_BORDER, 228, 5, 150, 30, hwnd,( HMENU ) ID_PRZYCISK_CANCEL, hInstance, NULL );
hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 5, 75, 200, 300, hwnd,( HMENU ) ID_TEXTBOX, hInstance, NULL );
ShowWindow( hwnd, nCmdShow );
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_COMMAND:
switch( wParam )
{
case ID_PRZYCISK1:
{
MessageBox( hwnd, "Wcisnąłeś przycisk 1", "Test", MB_ICONINFORMATION );
} break;
case ID_PRZYCISK2:
{
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 );
}
dwRozmiar = GetWindowTextLength( hText );
if( dwRozmiar == 0 ) {
MessageBox( NULL, "Nieprawidłowy rozmiar pliku!", "Niedobrze...", MB_ICONEXCLAMATION );
}
Bufor =( LPSTR ) GlobalAlloc( GPTR, dwRozmiar + 1 );
if( Bufor == NULL ) {
MessageBox( NULL, "Za mało pamięci!", "Ale wiocha...", MB_ICONEXCLAMATION );
PostQuitMessage( 0 );
}
GetWindowText( hText, Bufor, dwRozmiar );
Bufor[ dwRozmiar ] = 0;
if( !WriteFile( hPlik, Bufor, dwRozmiar, & dwZapisane, NULL ) ) {
MessageBox( NULL, "Błąd zapisu do pliku", "Dupa blada!", MB_ICONEXCLAMATION );
PostQuitMessage( 0 );
}
GlobalFree( Bufor );
CloseHandle( hPlik );
}
break;
case ID_TEXTBOX:
break;
case ID_PRZYCISK_CANCEL:
exit( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
break;
case WM_CLOSE:
DestroyWindow( hwnd );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return 0;
}