// include the basic windows header files and the Direct3D header file#include <windows.h>#include <windowsx.h>#include <d3d9.h>#include <d3dx9.h>#include <stdio.h>// define the screen resolution and keyboard macros#define SCREEN_WIDTH 1280#define SCREEN_HEIGHT 1024#define PICTURE_WIDTH 632#define PICTURE_HEIGHT 395#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)// include the Direct3D Library file#pragma comment (lib, "d3d9.lib")#pragma comment (lib, "d3dx9.lib")// global declarationsLPDIRECT3D9 d3d; // the pointer to our Direct3D interfaceLPDIRECT3DDEVICE9 d3ddev; // the pointer to the device classLPD3DXSPRITE d3dspt; // the pointer to our Direct3D Sprite interfaceLPD3DXFONT dxfont; // the pointer to the font object// sprite declarationsLPDIRECT3DTEXTURE9 sprite; // the pointer to the sprite// function prototypesvoid initD3D(HWND hWnd); // sets up and initializes Direct3Dvoid render_frame(void); // renders a single framevoid cleanD3D(void); // closes Direct3D and releases memoryint mousepos(void);int mousepos(int x) { POINT point; GetCursorPos(&point); if (x==1) { return point.x; } else { return point.y; }}// the WindowProc function prototypeLRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);// the entry point for any Windows programint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ HWND hWnd; WNDCLASSEX wc; ZeroMemory(&wc, sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WindowProc; wc.hInstance = hInstance; wc.hCursor = LoadCursorFromFile("C:\\Documents and Settings\\Owner\\My Documents\\MuffinFlavoreds Application\\crazy1.ani"); wc.lpszClassName = "WindowClass1"; RegisterClassEx(&wc); hWnd = CreateWindowEx(NULL, "WindowClass1", "Our Direct3D Program", WS_EX_TOPMOST | WS_POPUP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); // set up and initialize Direct3D initD3D(hWnd); // enter the main loop: MSG msg; while(TRUE) { DWORD starting_point = GetTickCount(); if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } render_frame(); // check the 'escape' key if(KEY_DOWN(VK_ESCAPE)) PostMessage(hWnd, WM_DESTROY, 0, 0); while ((GetTickCount() - starting_point) < 25); } // clean up DirectX and COM cleanD3D(); return msg.wParam;}// this is the main message handler for the programLRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ switch(message) { case WM_DESTROY: { PostQuitMessage(0); return 0; } break; } return DefWindowProc (hWnd, message, wParam, lParam);}// this function initializes and prepares Direct3D for usevoid initD3D(HWND hWnd){ d3d = Direct3DCreate9(D3D_SDK_VERSION); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = FALSE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hWnd; d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dpp.BackBufferWidth = SCREEN_WIDTH; d3dpp.BackBufferHeight = SCREEN_HEIGHT; // create a device class using this information and the info from the d3dpp stuct d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); D3DXCreateSprite(d3ddev, &d3dspt); // create the Direct3D Sprite object D3DXCreateTextureFromFileEx(d3ddev, // the device pointer "C:\\Documents and Settings\\Owner\\My Documents\\MuffinFlavoreds Application\\intrepid2.jpg", // the file name PICTURE_WIDTH, // default width PICTURE_HEIGHT, // default height D3DX_DEFAULT, // no mip mapping NULL, // regular usage D3DFMT_UNKNOWN, // 32-bit pixels with alpha D3DPOOL_MANAGED, // typical memory handling D3DX_DEFAULT, // no filtering D3DX_DEFAULT, // no mip filtering 0, // the hot-pink color key NULL, // no image info struct NULL, // not using 256 colors &sprite); // load to sprite HFONT hFont = CreateFont(32, // Our desired HEIGHT of the font0, // The WIDTH (If we leave this zero it will pick the best width depending on the height)0, // The angle of escapement0, // The angle of orientationFW_NORMAL, // The font's weight (We want it bold)FALSE, // Italic - We don't want italicFALSE, // Underline - We don't want it underlinedFALSE, // Strikeout - We don't want it strikethroughANSI_CHARSET, // This is the type of character setOUT_TT_PRECIS, // The Output PrecisionCLIP_DEFAULT_PRECIS, // The Clipping PrecisionANTIALIASED_QUALITY, // The quality of the font - We want anitaliased fontsFF_DONTCARE|DEFAULT_PITCH, // The family and pitch of the font. We don't care."Arial"); // The font name (Like "Arial", "Courier", etc...) D3DXCreateFont(d3ddev, hFont, &dxfont); return;}// this is the function used to render a single framevoid render_frame(void){ d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 0); d3ddev->BeginScene(); // begins the 3D scene d3dspt->Begin(); // begin sprite drawing D3DXVECTOR2 translation; translation.x = mousepos(1) - (PICTURE_WIDTH/2); translation.y = mousepos(0) - (PICTURE_HEIGHT/2); if (mousepos(0) <= PICTURE_HEIGHT/2) { SetCursorPos(mousepos(1), PICTURE_HEIGHT/2); } if (mousepos(1) <= PICTURE_WIDTH/2) { SetCursorPos(PICTURE_WIDTH/2, mousepos(0)); } if (mousepos(1) >= (SCREEN_WIDTH-(PICTURE_WIDTH/2))) { SetCursorPos((SCREEN_WIDTH-(PICTURE_WIDTH/2)), mousepos(0)); } if (mousepos(0) >= (SCREEN_HEIGHT-(PICTURE_HEIGHT/2))) { SetCursorPos(mousepos(1), (SCREEN_HEIGHT-(PICTURE_HEIGHT/2))); } d3dspt->Draw(sprite, NULL, NULL, NULL, NULL, &translation, 0xFFFFFFFF); char buffer[256]; sprintf(buffer, "Intrepid Boat Follow Your Mouse And Not Go Over Boundaries by MuffinFlavored.\nThe mouse is at %d X and %d Y.", mousepos(1), mousepos(0)); static RECT textbox; SetRect(&textbox, 0, 0, 1280, 1024); dxfont->DrawTextA(buffer, strlen(buffer), &textbox, DT_CENTER | DT_VCENTER, D3DCOLOR_ARGB(255, 255, 255, 255)); d3dspt->End(); // end sprite drawing d3ddev->EndScene(); // ends the 3D scene d3ddev->Present(NULL, NULL, NULL, NULL); return;}// this is the function that cleans up Direct3D and COMvoid cleanD3D(void){ sprite->Release(); d3ddev->Release(); d3d->Release(); return;}