#include "resource.h"
#include <windows.h>
#include "TCHAR.H"
// Forward declarations
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
//konstanter till knapparna
enum
{
NORTHBUTTON_ID = 100
};
enum
{
SOUTHBUTTON_ID = 200
};
enum
{
WESTBUTTON_ID = 300
};
enum
{
EASTBUTTON_ID = 400
};
//main
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// Definiera fönster
WNDCLASSEX wClass = { 0 };
wClass.cbSize = sizeof( WNDCLASSEX );
wClass.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
wClass.hCursor = (HCURSOR) LoadCursor( 0, IDC_ARROW );
wClass.hIcon = (HICON) LoadIcon( 0, IDI_APPLICATION );
wClass.hIconSm = 0;
wClass.hInstance = hInstance;
wClass.lpfnWndProc = WinProc;
wClass.lpszClassName = "Labyrint";
wClass.lpszMenuName = 0;
wClass.style = 0;
wClass.cbClsExtra = 0;
wClass.cbWndExtra = 0;
wClass.lpszMenuName = MAKEINTRESOURCE( IDR_MENY );
// Registrera Windows klassen
RegisterClassEx(&wClass);
// Skapa fönster
HWND hwndMain = CreateWindow( "Labyrint", "Labyrinth-spel",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
100, 150,
450, 350,
0, 0, hInstance, 0 );
//Skapa knappar
HWND hwndNorthButton = CreateWindow( "BUTTON", // Fönsterklass
"North", // Text på knappen
WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
350, 100, // Position, relativt föräldern
50, 20, // Storlek
hwndMain, // Förälderfönstrets handtag
(HMENU)NORTHBUTTON_ID, // Knappens ID
hInstance, // HINSTANCE som skickas med i WinMain
0 );
HWND hwndSouthButton = CreateWindow( "BUTTON", // Fönsterklass
"South", // Text på knappen
WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
350, 160, // Position, relativt föräldern
50, 20, // Storlek
hwndMain, // Förälderfönstrets handtag
(HMENU)SOUTHBUTTON_ID, // Knappens ID
hInstance, // HINSTANCE som skickas med i WinMain
0 );
HWND hwndWestButton = CreateWindow( "BUTTON", // Fönsterklass
"West", // Text på knappen
WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
310, 130, // Position, relativt föräldern
50, 20, // Storlek
hwndMain, // Förälderfönstrets handtag
(HMENU)WESTBUTTON_ID, // Knappens ID
hInstance, // HINSTANCE som skickas med i WinMain
0 );
HWND hwndEastButton = CreateWindow( "BUTTON", // Fönsterklass
"East", // Text på knappen
WS_CHILD|WS_VISIBLE, // Stil, OBS: WS_CHILD
390, 130, // Position, relativt föräldern
50, 20, // Storlek
hwndMain, // Förälderfönstrets handtag
(HMENU)EASTBUTTON_ID, // Knappens ID
hInstance, // HINSTANCE som skickas med i WinMain
0 );
MSG msg = { 0 };
while( GetMessage( &msg, 0, 0, 0 ) )
{
// Hantera meddelanden
TranslateMessage( &msg );
DispatchMessage( &msg );
}
// Avsluta
return (int)msg.wParam;
}
//WinProc
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc = {0}; // ett handtag till ett DC, som vi kommer att få i WM_PAINT
PAINTSTRUCT ps = {0}; // struct som anger en rektangel av fönstret som behövs ritas om
// Vilket meddelande?
switch(msg)
{
//Utmatning med TextOut()
case WM_PAINT:
hdc = BeginPaint( hwnd, &ps ); // hämta DC
TextOut( hdc, 20, 20, "X", strlen( "X" ) ); // skriv ut text till fönstret
EndPaint( hwnd, &ps ); // släpp DC
break;
// Meny
case WM_COMMAND:
//Vilket menyval
switch( LOWORD( wParam ) )
{
//File->Quit avslutar programmet
case ID_FILE_QUIT:
if( MessageBox( 0, "Do you really want to quit?", "Are you sure?", MB_YESNO ) == IDYES )
{
PostQuitMessage( 0 );
}
else
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
// North knappen
case NORTHBUTTON_ID:
//Ändra position på X:ET.. ???
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
// South knappen
case SOUTHBUTTON_ID:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
// West knappen
case WESTBUTTON_ID:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
// East knappen
case EASTBUTTON_ID:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
// Okänt menyval
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
}
// Avsluta om man trycker på krysset
case WM_CLOSE:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
}
return 0;
}