← index
Old.Learning.Projects/mma/WinMain.cpp
Source: Old.Learning.Projects/mma/WinMain.cpp
// main source

// written by jared bruni

// for the ultimate mma simulator

// www.lostsidedead.com/fight/



#include "thehead.h"


WNDPROC mainProc;
HINSTANCE hInst;
HWND mainwindow;
HWND newwindow;
HFONT thefont =  CreateFont(14,0,0,0,FW_DONTCARE,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_MODERN,"Arial");
HWND  hcombo;
HWND  hbok;


inline void Init();
inline void MenuProc(WPARAM wParam);
void UpdateTitle();
void SplashScreen();


Fighter fighter;
char filename[150];

HWND player_list;//listbox

HWND player_change;//exitbox

HWND player_item_static; // player item static

HWND player_item; // player itme

HWND button_up; // scroll up

HWND button_down; // scroll down

HWND button_save; // save

FighterListHandler FighterList;

// enumerated constants

enum { ID_LIST = 1,ID_EDIT,ID_UP,ID_DOWN,ID_SAVE };

// splash screen

void SplashScreen()
{
	HBITMAP hbm;
   	hbm = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));
	HWND stx;
	stx = CreateWindowEx(WS_EX_TOPMOST,"Static",NULL,WS_VISIBLE|WS_POPUP|SS_BITMAP,200,200,0,0,0,0,hInst,0);
	SendMessage(stx,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)hbm);
	ShowWindow(stx,SW_SHOW);
	UpdateWindow(stx);
	pause(2);// pause for 2 seconds

	ShowWindow(stx,SW_HIDE);
	DestroyWindow(stx);
	DeleteObject(hbm);
}
// winmain entry

int APIENTRY WinMain(HINSTANCE hInstx,HINSTANCE hPrev,LPSTR line,int CmdShow)
{
	
	hInst = hInstx;
	
	SplashScreen();
	
	MSG msg;
	Init();
	strcpy(filename,"Untitled.mma");
	UpdateTitle();
	
	
	
	
	while(GetMessage(&msg,0,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	
	return msg.wParam;
}

// init application

inline void Init()
{
	// init

	WNDCLASS wc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
	wc.hInstance = hInst;
	wc.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);
	wc.lpfnWndProc = (WNDPROC) MainProc;
	wc.lpszClassName = "Master";
	wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	
	RegisterClass(&wc);

	wc.lpszMenuName = NULL;
	wc.lpszClassName = "MasterNew";
	wc.lpfnWndProc = (WNDPROC) NewProc;

	RegisterClass(&wc);
	
	mainwindow = CreateWindow("Master","Ultimate MMA Simulator Character Editor",WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,640-75,290,0,0,hInst,0);
	newwindow = CreateWindowEx(WS_EX_TOPMOST,"MasterNew","Create a New Character",WS_OVERLAPPED ,100,100,200,90,0,0,hInst,0);

	ShowWindow(newwindow,SW_SHOW);
	UpdateWindow(newwindow);

}

// mainwindow callback function

LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_CLOSE:
		{
			if(MessageBox(hwnd,"Do you wish to save before exit?","Save?",MB_ICONQUESTION | MB_YESNO) == IDYES)
			{
				MenuProc(ID_FILESAVE);
			}
			
			SendMessage(hwnd,WM_DESTROY,0,0);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_CREATE:
		{
			HWND list_static;
			list_static = CreateWindow("Static","Player data",WS_CHILD|WS_VISIBLE,5,5,200,20,hwnd,0,hInst,0);
			SetMyFont(list_static);
			player_list = CreateWindowEx(WS_EX_STATICEDGE,"ListBox",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|LBS_NOTIFY,5,25,625-75,200,hwnd,(HMENU)ID_LIST,hInst,0);
			SetMyFont(player_list);
			player_item_static = CreateWindow("Static","name",WS_CHILD | WS_VISIBLE,5,5+5+5+200+5,100,25,hwnd,0,hInst,0);
			SetMyFont(player_item_static); 
			player_item = CreateWindowEx(WS_EX_STATICEDGE,"Edit","",WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_VSCROLL|WS_BORDER,115,15+200,200,25,hwnd,(HMENU)ID_EDIT,hInst,0);
			SetMyFont(player_item);
			button_up = CreateWindowEx(WS_EX_STATICEDGE,"Button","Move up",WS_CHILD|WS_VISIBLE|WS_BORDER|BS_PUSHBUTTON,115+200+5,15+200,75,25,hwnd,(HMENU)ID_UP,hInst,0);
			SetMyFont(player_item);
			button_down = CreateWindowEx(WS_EX_STATICEDGE,"Button","Move down",WS_CHILD|WS_VISIBLE|WS_BORDER|BS_PUSHBUTTON,115+200+5+75+5,15+200,75,25,hwnd,(HMENU)ID_DOWN,hInst,0);
			SetMyFont(button_down);
			button_save = CreateWindowEx(WS_EX_STATICEDGE,"Button","Save",WS_CHILD|WS_VISIBLE|WS_BORDER|BS_PUSHBUTTON,115+200+5+75+5+75+5,15+200,75,25,hwnd,(HMENU)ID_SAVE,hInst,0);
			SetMyFont(button_save);
			SetMyFont(button_up);
			FighterList.loadfightlist();
			mainProc = (WNDPROC)SetWindowLong(player_item,GWL_WNDPROC,(LPARAM)(WNDPROC)EditProc);
			SendMessage(player_list,LB_SETCURSEL,0,0);
			SetFocus(player_item);
		}
		break;
	case WM_COMMAND:
		{
			MenuProc(wParam);
			
			switch(HIWORD(wParam))
			{
			case LBN_SELCHANGE:
				{
					switch(LOWORD(wParam))
					{
					case ID_LIST:
						{
							int current;
							current = SendMessage(player_list,LB_GETCURSEL,0,0);
							FighterList.setcurrent(current);
						}
						break;
					}
				}
				break;
			case BN_CLICKED:
				{
					switch(LOWORD(wParam))
					{
					case ID_UP:
						FighterList.scroll_up();
						break;
					case ID_DOWN:
						FighterList.scroll_down();
						break;
					case ID_SAVE:
						MenuProc(ID_FILESAVE);
						break;
					}
				}
				break;
			}
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}
	
	return 0;
}
// subclassed edit callback

LRESULT APIENTRY EditProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_KEYDOWN:
		{
			
			switch(wParam)
			{
			case VK_RETURN:
				{
					FighterList.scroll_down();
				}
				break;
			}
		}
		break;
		
	default: return CallWindowProc(mainProc,hwnd,msg,wParam,lParam);
	}
	return 0;
}

// create a new fighter proccess

LRESULT APIENTRY NewProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg) 
	{
	case WM_CLOSE:
		break;
	case WM_CREATE:
		{
			 hcombo = CreateWindow("ComboBox",NULL,WS_BORDER|CBS_DISABLENOSCROLL|WS_CHILD|CBS_DROPDOWNLIST|WS_VISIBLE,5,5,200-15,100,hwnd,NULL,hInst,0); 
			 SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Blank Character");
			 SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Striker");
			 SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"GNPer");
			 SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"BJJer");
			 SetMyFont(hcombo);
			 hbok = CreateWindow("Button","Create",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,200-15-75+5,25+10,75,25,hwnd,(HMENU)1,hInst,0);
			 SetMyFont(hbok);
			 HWND mst;
			 mst = CreateWindow("Static","Select Type",WS_CHILD | WS_VISIBLE,5+5,25+10+5,100,20,hwnd,0,hInst,0);
			 SetMyFont(mst);
			 SendMessage(hcombo,CB_SETCURSEL,0,0);
		}
		break;
	case WM_COMMAND:
		{
			switch(HIWORD(wParam))
			{
			case BN_CLICKED:
				{
					switch(LOWORD(wParam))
					{
					case 1:
						{
							ZeroMemory(&fighter,sizeof(fighter));

							int cursel;
							cursel = SendMessage(hcombo,CB_GETCURSEL,0,0);
							switch(cursel)
							{
							case 0:
								fighter.Clear();
								break;
							case 1:
								fighter.SetTemplate(STRIKER);
								break;
							case 2:
								fighter.SetTemplate(GNPER);
								break;
							case 3:
								fighter.SetTemplate(BJJER);
								break;

							}

							strcpy(filename,"Untitled.mma");

							ShowWindow(hwnd,SW_HIDE);
							ShowWindow(mainwindow,SW_SHOW);
							UpdateWindow(mainwindow);
						}
						break;
					}
				}
				break;
			}
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return 0;
}

// menu proccess

inline void MenuProc(WPARAM wParam)
{
	switch(wParam)
	{
	case ID_FILENEW:
		ShowWindow(newwindow,SW_SHOW);
		break;
	case ID_FILESAVE: 
		{
			
			if(strstr(filename,"Untitled.mma"))
			{
				MenuProc(ID_FILESAVEAS);
				return;
			}
			
			
			ofstream fout(filename,ios::binary);
			
			fout.write((char*)&fighter,sizeof(fighter));
			
			fout.close();
			
			UpdateTitle();
		}
		break;
	case ID_FILESAVEAS:
		
		char savename[100];
		if(savefile(savename))
		{
			strcpy(filename,savename);
			if(strstr(filename,".mma"))
			{return;
			} else {
				
				strcat(filename,".mma");
			}
			
			MenuProc(ID_FILESAVE);
			return;
			
		}
		
		break;
	case ID_FILELOAD:
		
		char files[100];
		if(openfile(files))
		{
			strcpy(filename,files);
			ZeroMemory(&fighter,sizeof(fighter));
			
			SendMessage(player_list,LB_SETCURSEL,0,0);
			
			ifstream fin(filename,ios::binary);
			
			fin.read((char*)&fighter,sizeof(fighter));
			
			fin.close();
			
			SendMessage(player_item,WM_SETTEXT,100,(LPARAM)(LPCSTR)fighter.namex);
			
			UpdateTitle();
		}
		
		break;
	case ID_FILEEXIT:
		SendMessage(mainwindow,WM_CLOSE,0,0);
		break;
	case ID_EDITCLEAR:
		{
			if(MessageBox(0,"Do you wish to clear all fields?","Well..?",MB_ICONQUESTION | MB_YESNO) == IDYES)
			{
				fighter.Clear();
				FighterList.setcurrent(0);
				SendMessage(player_list,LB_SETCURSEL,0,0);
			}
		}
		break;
	case ID_HELPONLINE:
		{
			ShellExecute(0,"open","http://www.lostsidedead.com/fight/",NULL,NULL,SW_SHOW);
		}
		break;
	case ID_HELPABOUT:
		{
			// Shell About

			ShowAbout("Ultimate MMA Character Editor","Ultimate MMA Character Editor 1.0\r\nWritten by Jared Bruni\r\nwww.lostsidedead.com\r\nsupport me, by supporting my sponsors!");
		}
		break;
	}
}

// update the title

void UpdateTitle()
{
	char buffer[100];
	strcpy(buffer,"Ultimate MMA Simulator Character Editor - ");
	strcat(buffer,filename);
	SendMessage(mainwindow,WM_SETTEXT,strlen(buffer),(LPARAM)(LPCSTR)buffer);
}