You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
4.2 KiB
181 lines
4.2 KiB
// FFXIMapViewer.cpp : Defines the entry point for the application. |
|
// |
|
|
|
#include "stdafx.h" |
|
#include "FFXIMapViewer.h" |
|
#include "DxRender.h" |
|
#include "MapManager.h" |
|
#include <process.h> |
|
|
|
|
|
|
|
#define MAX_LOADSTRING 100 |
|
|
|
// Global Variables: |
|
MapManager m_MapManager; |
|
bool ThreadRun = true; |
|
HANDLE m_hThread; |
|
unsigned int m_uiThread; |
|
HINSTANCE hInst; // 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); |
|
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); |
|
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); |
|
|
|
|
|
unsigned int WINAPI ThreadProc(void* lParam) |
|
{ |
|
DxRender* m_Render = (DxRender*)lParam; |
|
while(ThreadRun) |
|
{ |
|
m_Render->onTick(); |
|
} |
|
return 0; |
|
} |
|
|
|
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) |
|
{ |
|
UNREFERENCED_PARAMETER(hPrevInstance); |
|
UNREFERENCED_PARAMETER(lpCmdLine); |
|
|
|
// TODO: Place code here. |
|
MSG msg; |
|
HACCEL hAccelTable; |
|
HWND hWnd; |
|
DxRender m_Render; |
|
|
|
hInst = hInstance; // Store instance handle in our global variable |
|
|
|
// Initialize global strings |
|
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); |
|
LoadString(hInstance, IDC_FFXIMAPVIEWER, szWindowClass, MAX_LOADSTRING); |
|
MyRegisterClass(hInstance); |
|
|
|
hWnd = CreateWindow(szWindowClass, |
|
szTitle, |
|
WS_OVERLAPPEDWINDOW, |
|
CW_USEDEFAULT, CW_USEDEFAULT, |
|
1024, 768, |
|
0, |
|
NULL, |
|
hInstance, |
|
NULL); |
|
|
|
if (!hWnd) |
|
{ |
|
return FALSE; |
|
} |
|
|
|
m_MapManager.LoadMap(126); |
|
if(!m_Render.Init(hWnd, &m_MapManager)) |
|
{ |
|
MessageBoxA(0, "DirectX9Create failed.", "Error", MB_OK | MB_ICONEXCLAMATION); |
|
} |
|
ShowWindow(hWnd, nCmdShow); |
|
UpdateWindow(hWnd); |
|
SetFocus(hWnd); |
|
|
|
m_hThread = (HANDLE)_beginthreadex( NULL, 0, &ThreadProc, &m_Render, 0, &m_uiThread ); |
|
|
|
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_FFXIMAPVIEWER)); |
|
|
|
// Main message loop: |
|
while (GetMessage(&msg, NULL, 0, 0)) |
|
{ |
|
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) |
|
{ |
|
TranslateMessage(&msg); |
|
DispatchMessage(&msg); |
|
} |
|
} |
|
|
|
ThreadRun = false; |
|
WaitForSingleObject(m_hThread, 4000); |
|
m_Render.Release(); |
|
|
|
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; |
|
wcex.cbClsExtra = 0; |
|
wcex.cbWndExtra = 0; |
|
wcex.hInstance = hInstance; |
|
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_FFXIMAPVIEWER)); |
|
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); |
|
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); |
|
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_FFXIMAPVIEWER); |
|
wcex.lpszClassName = szWindowClass; |
|
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); |
|
|
|
return RegisterClassEx(&wcex); |
|
} |
|
|
|
// |
|
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) |
|
// |
|
// 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_EXIT: |
|
DestroyWindow(hWnd); |
|
break; |
|
default: |
|
return DefWindowProc(hWnd, message, wParam, lParam); |
|
} |
|
break; |
|
case WM_PAINT: |
|
hdc = BeginPaint(hWnd, &ps); |
|
// TODO: Add any drawing code here... |
|
EndPaint(hWnd, &ps); |
|
break; |
|
case WM_DESTROY: |
|
PostQuitMessage(0); |
|
break; |
|
default: |
|
return DefWindowProc(hWnd, message, wParam, lParam); |
|
} |
|
return 0; |
|
} |