From 866f0ad8030ea2ceea22a4d61e6ff0006546c3fa Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Tue, 13 May 2003 12:05:12 +0000 Subject: Here we go --- Cube.cpp | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100755 Cube.cpp (limited to 'Cube.cpp') diff --git a/Cube.cpp b/Cube.cpp new file mode 100755 index 0000000..d1ce6b2 --- /dev/null +++ b/Cube.cpp @@ -0,0 +1,243 @@ +// Cube.cpp : Defines the entry point for the application. +// + +#include "stdafx.h" +#include "Cube.h" + +#define MAX_LOADSTRING 100 +#define BORDERLEN 400 +#define NUMPTZ 8 + +int startx, starty; + +// Global Variables: +HINSTANCE hInst = NULL; // current instance +TCHAR szTitle[MAX_LOADSTRING]; // The title bar text +TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name + +// Forward declarations of functions included in this code module: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +int APIENTRY _tWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + // TODO: Place code here. + MSG msg; + HACCEL hAccelTable; + + // Initialize global strings + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_CUBE, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + // Perform application initialization: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CUBE); + + // Main message loop: + while (GetMessage(&msg, NULL, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int) msg.wParam; +} + + + +// +// FUNCTION: MyRegisterClass() +// +// PURPOSE: Registers the window class. +// +// COMMENTS: +// +// This function and its usage are only necessary if you want this code +// to be compatible with Win32 systems prior to the 'RegisterClassEx' +// function that was added to Windows 95. It is important to call this function +// so that the application will get 'well formed' small icons associated +// with it. +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_CUBE); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+2); + wcex.lpszMenuName = (LPCTSTR)IDC_CUBE; + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); + + return RegisterClassEx(&wcex); +} + +// +// FUNCTION: InitInstance(HANDLE, int) +// +// PURPOSE: Saves instance handle and creates main window +// +// COMMENTS: +// +// In this function, we save the instance handle in a global variable and +// create and display the main program window. +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + int i,j,k; + + hInst = hInstance; // Store instance handle in our global variable + + hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); + + if (!hWnd) + { + return FALSE; + } + + Gfx_init( ); + Vector_init( NUMPTS, BORDERLEN ); + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + +#include +#include + +// +// FUNCTION: WndProc(HWND, unsigned, WORD, LONG) +// +// PURPOSE: Processes messages for the main window. +// +// WM_COMMAND - process the application menu +// WM_PAINT - Paint the main window +// WM_DESTROY - post a quit message and return +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + int wmId, wmEvent; + PAINTSTRUCT ps; + HDC hdc; + + switch (message) + { + case WM_COMMAND: + wmId = LOWORD(wParam); + wmEvent = HIWORD(wParam); + // Parse the menu selections: + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + break; + case WM_KEYDOWN: + switch ( wParam ) { + case 'A': + Vector_angle( -0.01, 0, 0); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 'S': + Vector_angle( +0.01, 0, 0); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 'Q': + Vector_angle( 0, -0.01, 0); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 'W': + Vector_angle( 0, +0.01, 0); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 'Y': + Vector_angle( 0, 0, -0.01); + InvalidateRect(hWnd, NULL, TRUE); + break; + case 'X': + Vector_angle( 0, 0, +0.01); + InvalidateRect(hWnd, NULL, TRUE); + break; + + } + break; + case WM_LBUTTONDOWN: + startx = HIWORD(lParam); + starty = LOWORD(lParam); + + break; + case WM_MOUSEMOVE: + if ( wParam & MK_LBUTTON) { + Vector_move( startx - HIWORD(lParam) , LOWORD(lParam) - starty ); + + startx = HIWORD(lParam); + starty = LOWORD(lParam); + + InvalidateRect( hWnd, NULL, TRUE); + } + break; + case WM_PAINT: + { + hdc = BeginPaint(hWnd, &ps); + + EndPaint(hWnd, &ps); + break; + } + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// Message handler for about box. +LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + return TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return TRUE; + } + break; + } + return FALSE; +} -- cgit v1.2.3