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
6 years ago
|
// 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;
|
||
|
}
|