← index
Old.Learning.Projects/SuperMasterLE/Main.cpp
Source: Old.Learning.Projects/SuperMasterLE/Main.cpp
/* SuperMaster LE ( Level Editor )
   written by Jared Bruni
   www.LostSideDead.com

  "Open Source, Open Mind"

*/

#define WIN32_LEAN_AND_MEAN

#include<windows.h>

#include<commdlg.h>

#include<stdio.h>

#include<fstream.h>

#include"resource.h"



const int MAX_TILE = 8000;
const int ID_COMBO = 4;
const int ID_COMBO2 = 5;
const int ID_COMBO3 = 6;

/***************************** game Level structure *********************************/
struct Level
{
	struct Tile
	{
		int block;
		bool solid;
	};


	char level_name[255];
	int grandma[50]; 
	int start_pos;
	Tile tiles[MAX_TILE];

	inline Level()
	{
		strcpy(level_name,"null");
		for(int i = 0; i < MAX_TILE; i++)
		{
			tiles[i].block = 0;
			tiles[i].solid = false;
		}
	}
};

Level level;
   
/******************* function prototypes ****************************************/
LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
LRESULT APIENTRY AboutProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
LRESULT APIENTRY HelpProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
LRESULT APIENTRY MapProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);


inline void Init();
inline WPARAM Loop();
inline void LoadGraphics();
inline void DestroyGraphics();
void SetImage(HWND hwnd, int sprite);
void ReloadGrid();
void UpdateTitle();
void MenuProc(WPARAM wParam);
void MapClear();
bool openfile(char*);
bool savefile(char*);
int  getblockbypos(int x, int y);
void ScrollLeft();
void ScrollRight();
int getoffgrandma();
void ShowMap();
void HideMap();


/************** global variables *************************************************/
int off_set = 0,i,z;
HWND main, grid[1240],bleft,bright,hcombo,hcombo2,hcombo3,hstatic,about,help,map,mapedit,mapok;
HBITMAP images[15],hero,grandma;
char filename[255];
int cur_block = 0;
bool cur_solid = false;
int cur_tool = 0,cur_object = 0; 
HBITMAP sidelogo,aboutlogo;


/************************ function bodys *****************************************/
int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR line,int CmdShow)
{
	Init();
	return (Loop());
}


inline void Init()
{
	WNDCLASSEX wc;
	wc.cbClsExtra  = 0;
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); 
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);
	wc.hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1));
	wc.hIconSm = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1));
	wc.hInstance = GetModuleHandle(NULL);
	wc.lpfnWndProc = (WNDPROC) MainProc;
	wc.lpszClassName = "SuperMasterLE";
	wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
	wc.style = CS_HREDRAW | CS_VREDRAW;

	RegisterClassEx(&wc);

	wc.lpszMenuName = NULL;
	wc.lpszClassName = "MasterAbout";
	wc.lpfnWndProc = (WNDPROC) AboutProc;

	RegisterClassEx(&wc);

	wc.lpszClassName = "MasterHelp";
	wc.lpfnWndProc = (WNDPROC) HelpProc;

	RegisterClassEx(&wc);

	wc.lpszClassName = "MasterMap";
	wc.lpfnWndProc = (WNDPROC) MapProc;

	RegisterClassEx(&wc);

	LoadGraphics();

	main = CreateWindowEx(WS_EX_TOPMOST,"SuperMasterLE","Super MasterLE",WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,0,0,715,440,0,0,GetModuleHandle(NULL),0);
	about = CreateWindowEx(WS_EX_TOPMOST,"MasterAbout","About SuperMasterLE",WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,290,290,0,0,GetModuleHandle(NULL),0);
	help = CreateWindowEx(WS_EX_TOPMOST,"MasterHelp", "How to use",WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,300,300,0,0,GetModuleHandle(NULL),0);
	map = CreateWindowEx(WS_EX_TOPMOST,"MasterMap","Map Properties",WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,300,110,0,0,GetModuleHandle(NULL),0);


	MapClear();
 
	ShowWindow(main,SW_SHOW);
	UpdateWindow(main);
	ReloadGrid();
	UpdateTitle();
}

inline WPARAM Loop()
{
	MSG msg;
	while(GetMessage(&msg,0,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

inline void LoadGraphics()
{
	images[0] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1));
	images[1] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP2));
	images[2] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP3));
	images[3] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP4));
	images[4] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP5));
	images[5] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP6));
	images[6] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP7));
	images[7] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP8));
	images[8] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP9));
	images[9] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP10));
	images[10] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP11));
	images[11] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP12));
	images[12] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP13));
	images[13] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP14));
	images[14] = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP15));
	hero = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP16));
	grandma = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP17));
	sidelogo = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP18));
	aboutlogo = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP19));

}

inline void DestroyGraphics()
{
	for(int i = 0; i < 14; i++)
	{
		DeleteObject(images[i]);
	}

	DeleteObject(hero);
	DeleteObject(grandma);
	DeleteObject(sidelogo);
	DeleteObject(aboutlogo);
}

void SetImage(HWND hwnd, int sprite)
{
	if(sprite < 15)
	{
		SendMessage(hwnd,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)images[sprite]);
	}
}

void ReloadGrid()
{
	for(i = 0; i < 700-4+24; i++)
	{
		if(level.start_pos == i+off_set)
		{
			SendMessage(grid[i],STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)hero);
			continue;
		}

		bool ok = true;

		for(z = 0; z < 50; z++)
		{
			if(level.grandma[z] == i+off_set && level.grandma[z] != 0)
			{
				SendMessage(grid[i],STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)grandma);
				ok = false;
				break;
			}
		}
	
		if(ok == true)
		{

		SetImage(grid[i],level.tiles[i+off_set].block);

		}
		
	}


}

void MapClear()
{
	for(i = 0; i < MAX_TILE; i++)
	{
		level.tiles[i].block = 0;
		level.tiles[i].solid = false;
	}

	for(i = 0; i < 50; i++)
	{
		level.grandma[i] = 0;
	}

	level.start_pos = 0;

	strcpy(filename,"Untitled.sml");
	strcpy(level.level_name,"Unknown Level");
}


void UpdateTitle()
{
	char title[355];
	sprintf(title,"SuperMasterLE - %s",filename);
	SendMessage(main,WM_SETTEXT,strlen(title),(LPARAM)(LPCSTR)title);
}


int  getblockbypos(int x, int y)
{
	int bx,by;
	bx = 5; by = 5;
	int gcount = 0;
	
	for(i = 0; i < 700-4+24; i++)
	{
		
 	if(x > bx && x < bx+16 && y > by && y < by + 16)
	{
		return i;
	}
		
		by = by + 16;
		gcount++;
		if(gcount > 23)
		{
			gcount = 0;
			by = 5;
			bx = bx + 16;
		}		
	}
	
	return -1;
}

void ScrollLeft()
{
	if(off_set > 0)
	{
		off_set -= 24;
		ReloadGrid();
	}


}

void ScrollRight()
{
	if(off_set < MAX_TILE)
	{
		off_set += 24;
		ReloadGrid();
	}
}


int getoffgrandma()
{
	for(i = 0; i < MAX_TILE; i++)
	{
		if(level.grandma[i] == 0)
		{
			return i;
		}
	}
	return -1; // fail

}

void ShowMap()
{
	SendMessage(mapedit,WM_SETTEXT,strlen(level.level_name),(LPARAM)(LPCSTR)level.level_name);
	ShowWindow(map,SW_SHOW);
}

void HideMap()
{
	SendMessage(mapedit,WM_GETTEXT,255,(LPARAM)(LPCSTR)level.level_name);
	ShowWindow(map,SW_HIDE);
}


LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_DESTROY:
		DestroyGraphics();
		PostQuitMessage(0);
		break;
	case WM_CREATE:
		{
			int bx,by;
			bx = 5; by = 5;
			int gcount = 0;
			
			for(i = 0; i < 700-4+24; i++)
			{
				
				grid[i] = CreateWindow("Static",NULL, WS_CHILD | WS_VISIBLE |SS_BITMAP,bx,by,16,16,hwnd,0,GetModuleHandle(NULL),0);			
				by = by + 16;
				gcount++;
				if(gcount > 23)
				{
					gcount = 0;
					by = 5;
					bx = bx + 16;
				}
				
			}

			bleft = CreateWindow("Button","Scroll Left",WS_CHILD | WS_VISIBLE | WS_BORDER ,495,5,100,25,hwnd,(HMENU)1,GetModuleHandle(NULL),0);
			bright = CreateWindow("Button","Scroll Right",WS_CHILD | WS_VISIBLE | WS_BORDER ,495+100+5,5,100,25,hwnd,(HMENU)2,GetModuleHandle(NULL),0);
			hcombo = CreateWindow("ComboBox",NULL,WS_VSCROLL | WS_BORDER|CBS_DISABLENOSCROLL|WS_CHILD|CBS_DROPDOWNLIST|WS_VISIBLE,495,35,150,300,hwnd,(HMENU)ID_COMBO,GetModuleHandle(NULL),0); 
            HWND st;
			st = CreateWindow("Static","Draw Tools",WS_CHILD | WS_VISIBLE ,495,60,100,20,hwnd,0,GetModuleHandle(NULL),0);
			hcombo2 = CreateWindow("ComboBox",NULL,WS_VSCROLL | WS_BORDER|CBS_DISABLENOSCROLL|WS_CHILD|CBS_DROPDOWNLIST|WS_VISIBLE,495,80,205,100,hwnd,(HMENU)ID_COMBO2,GetModuleHandle(NULL),0); 
			hstatic = CreateWindow("Static",NULL, WS_CHILD | WS_VISIBLE |SS_BITMAP,495+150+5,38,16,16,hwnd,0,GetModuleHandle(NULL),0);
			HWND st2;
			st2 = CreateWindow("Static","Objects",WS_CHILD | WS_VISIBLE ,495,80+30,100,20,hwnd,0,GetModuleHandle(NULL),0);
			hcombo3 = CreateWindow("ComboBox",NULL,WS_VSCROLL | WS_BORDER|CBS_DISABLENOSCROLL|WS_CHILD|CBS_DROPDOWNLIST|WS_VISIBLE,495,80+50,205,100,hwnd,(HMENU)ID_COMBO3,GetModuleHandle(NULL),0); 
			HWND st3;
			st3 = CreateWindow("Static",NULL,WS_CHILD | WS_VISIBLE | SS_BITMAP,495,80+50+30,10,10,hwnd,0,GetModuleHandle(NULL),0);
			SendMessage(st3,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)sidelogo);

			SendMessage(hstatic,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)images[0]);
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Black sky");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Grass");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Blue Brick");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Blue Sky");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Brick");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Werid Brick");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Red Block");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Sand 1");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Sand 2");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Snow");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Stone 1");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Stone 2");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Stone 3");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Stone 4");
			SendMessage(hcombo,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Level Exit Block");
			SendMessage(hcombo,CB_SETCURSEL,0,0);

			SendMessage(hcombo2,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Pencil");
			SendMessage(hcombo2,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Square");
			SendMessage(hcombo2,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Fill");
			SendMessage(hcombo2,CB_SETCURSEL,0,0);

			SendMessage(hcombo3,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Master");
			SendMessage(hcombo3,CB_ADDSTRING,255,(LPARAM)(LPCSTR)"Grandma");
			SendMessage(hcombo3,CB_SETCURSEL,0,0);

		}
		break;
	case WM_COMMAND:
		{
			MenuProc(wParam);

			switch(HIWORD(wParam))
			{
			case CBN_SELCHANGE:
				{
					
					switch(LOWORD(wParam))
					{
					case ID_COMBO:
						{
							
							int sel;
							sel = SendMessage(hcombo,CB_GETCURSEL,0,0);
							SendMessage(hstatic,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)images[sel]);
							cur_block = sel;
							if(sel == 0 || sel == 3 || sel == 14 )
							{
								cur_solid = false;
							}
							else
							{
								cur_solid = true;
							}
							
						}
						break;
					case ID_COMBO2:
						{
							cur_tool = SendMessage(hcombo2,CB_GETCURSEL,0,0);
						}
						break;
					case ID_COMBO3:
						{
							cur_object = SendMessage(hcombo3,CB_GETCURSEL,0,0);
						}
						break;
						
					}
									
				}
				break;
			case BN_CLICKED:
				{
					switch(LOWORD(wParam))
					{
					case 1:
						{
							ScrollLeft();
						}
						break;
					case 2:
						{
							ScrollRight();
						}
						break;
					}

				}
				break;
			}
		}
		break;
	case WM_MOUSEMOVE:
		{
			int mx;
			int my;
			mx = LOWORD(lParam);
			my = HIWORD(lParam);
			int pos;
			pos = getblockbypos(mx,my);
			if(pos != -1)
			{
				if(wParam & MK_LBUTTON)
				{
					switch(cur_tool)
					{
					case 0://pencil

						{

					level.tiles[off_set+pos].block = cur_block;
					level.tiles[off_set+pos].solid = cur_solid;
					SetImage(grid[pos],cur_block);

						}
						break;
					case 1://square

						{
							level.tiles[off_set+pos].block = cur_block;
							level.tiles[off_set+pos].solid = cur_solid;

							level.tiles[off_set+pos+1].block = cur_block;
							level.tiles[off_set+pos+1].solid = cur_solid;

							level.tiles[off_set+pos+24].block = cur_block;
							level.tiles[off_set+pos+24].solid = cur_solid;

							level.tiles[off_set+pos+25].block = cur_block;
							level.tiles[off_set+pos+25].solid = cur_solid;

							SetImage(grid[pos],cur_block);
							SetImage(grid[pos+1],cur_block);
							SetImage(grid[pos+24],cur_block);
							SetImage(grid[pos+25],cur_block);

						}
						break;
					case 2://fill

						{
							for(i = 0; i < 700-4+24; i++)
							{
								level.tiles[i+off_set].block = cur_block;
								level.tiles[i+off_set].solid = cur_solid;
								//SetImage(grid[i],cur_block);

							}

							ReloadGrid();
						}
						break;
					}
				}
			}
		}
		break;
		// placing bricks

	case WM_LBUTTONDOWN:
		{
			if(cur_tool == 2)
			{
				for(i = 0; i < 700-4+24; i++)
				{
					level.tiles[i+off_set].block = cur_block;
					level.tiles[i+off_set].solid = cur_solid;
					SetImage(grid[i],cur_block);
				}
			}
		}
		break;
		// placing objects

	case WM_RBUTTONDOWN:
		{
			int mx;
			int my;
			mx = LOWORD(lParam);
			my = HIWORD(lParam);
			
			int pos;
			pos = getblockbypos(mx,my);
			if(pos != -1)
			{
				
				// place the hero, hes only allowed 1 spot

				if(cur_object == 0)
				{
					level.start_pos = pos+off_set;
					ReloadGrid();
				}
				else
				{
					for(i = 0; i < 50; i++)
					{
						if(level.grandma[i] == pos+off_set)
						{
							level.grandma[i] = 0;
							ReloadGrid();
							return 0;
						}
					}

					int off;
					off = getoffgrandma();
					if(off != -1)
					{

					level.grandma[off] = pos+off_set;
					SendMessage(grid[pos],STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)grandma);

					}
				}
			}
			
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return (0);
}


void MenuProc(WPARAM wParam)
{
	switch(wParam)
	{
	case ID_FILENEW:
		{
			if(MessageBox(GetForegroundWindow(),"Are you sure you wish to create a new map?","Well..?",MB_ICONQUESTION | MB_YESNO) == IDYES)
			{
				MapClear();
				UpdateTitle();
				ReloadGrid();
			}
		}
		break;
	case ID_FILESAVEAS:
		{
			char tfile[255];
			if(savefile(tfile) == true)
			{
				strcpy(filename,tfile);
				if(strstr(filename,".sml"))
				{
				}
				else
				{
				strcat(filename,".sml");
				}
				MenuProc(ID_FILESAVE);
				return;
			}
		}
		break;
	case ID_FILESAVE:
		{
			if(strcmp(filename,"Untitled.sml") == 0)
			{
				MenuProc(ID_FILESAVEAS);
				return;
			}
			else
			{
				ofstream fout(filename,ios::binary);
				fout.write((char*)&level,sizeof(level));
				fout.close();
				UpdateTitle();
			}
		}
		break;
	case ID_FILEOPEN:
		{
			char tfile[255];
			if(openfile(tfile) == true)
			{
				strcpy(filename,tfile);
				ifstream fin(filename,ios::binary);
				fin.read((char*)&level,sizeof(level));
				fin.close();
				off_set = 0;
				ReloadGrid();
				UpdateTitle();		
			}
		}
		break;
	case ID_FILEEXIT:
		{
			SendMessage(main,WM_CLOSE,0,0);
		}
		break;
	case ID_LEFT:
		{
			ScrollLeft();
		}
		break;
	case ID_RIGHT:
		{
			ScrollRight();
		}
		break;
	case ID_CLEAR:
		{
			if(MessageBox(GetForegroundWindow(),"Are you sure you wish to clear this map?","Clear Map?", MB_ICONQUESTION | MB_YESNO) == IDYES)
			{
				for(i = 0; i < MAX_TILE; i++)
				{
					level.tiles[i].block = 0;
					level.tiles[i].solid = false;
				}

				for(i = 0; i < 50; i++)
				{
				   level.grandma[i] = 0;
				}

				ReloadGrid();
			}
		}
		break;
	case ID_ABOUT:
		{
			ShowWindow(about,SW_SHOW);
			UpdateWindow(about);
		}
		break;
	case ID_HOW:
		{
			ShowWindow(help,SW_SHOW);
			UpdateWindow(help);
		}
		break;
	case ID_PROP:
		{
			ShowMap();
		}
		break;
	}
}
/*********************************************** about window ****************************/
LRESULT APIENTRY AboutProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_CLOSE:
		ShowWindow(hwnd,SW_HIDE);
		break;
	case WM_CREATE:
		{
			HWND istat;
			istat = CreateWindow("Static",NULL,WS_CHILD | WS_VISIBLE | SS_BITMAP,0,0,100,100,hwnd,0,GetModuleHandle(NULL),0);
			SendMessage(istat,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)(HBITMAP)aboutlogo);
			
		}
		break;
	case WM_LBUTTONDOWN:
		{
			ShowWindow(hwnd,SW_HIDE);
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}
	
	return (0);
}

/************************************map properties proc **********************************/

LRESULT APIENTRY MapProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_CLOSE:
		HideMap();
		break;
	case WM_CREATE:
		{
			HWND st;
			st = CreateWindow("Static","Map Name",WS_CHILD | WS_VISIBLE,5,5,100,20,hwnd,0,GetModuleHandle(NULL),0);
			mapedit = CreateWindowEx(WS_EX_STATICEDGE,"Edit","Unknown Map",WS_CHILD | WS_VISIBLE | WS_BORDER ,5,30,285,20,hwnd,0,GetModuleHandle(NULL),0);
			mapok = CreateWindow("Button","Ok",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,295-80,55,75,25,hwnd,0,GetModuleHandle(NULL),0);
		}
		break;
	case WM_COMMAND:
		{
			switch(HIWORD(wParam))
			{
			case BN_CLICKED:
				{
					HideMap();
				}
				break;
			}
		}
		break;

	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return (0);
}

/*********************************** How to Use Window ************************************/
LRESULT APIENTRY HelpProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{

	switch(msg)
	{
	case WM_CLOSE:
		ShowWindow(hwnd,SW_HIDE);
		break;
	case WM_CREATE:
		{
			HWND hedit;
			hedit = CreateWindowEx(WS_EX_STATICEDGE,"Edit","SuperMaster Level Editor\r\nWritten by Jared Bruni\r\n Open Source , Open Mind\r\n www.LostSideDead.com\r\nHow to use\r\n Select your Tool, and your Brick\r\n Then use the Left Mouse button to draw on the grid\r\nUse the Right Mouse Button to place the grandma/hero\r\nright click on a already placed grandma and she will be removed\r\npretty simple\r\n :)\r\n (-<)", ES_MULTILINE | ES_READONLY |  WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER ,5,5,285,265,hwnd,0,GetModuleHandle(NULL),0);
			
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return (0);
}

/*********************************** common dialog box ************************************/



bool openfile(char* cFile)
{
	char szFile[200];
	
	
	OPENFILENAME ofn;       // common dialog box structure

	
	strcpy(szFile, "*.sml");
	
	// Initialize OPENFILENAME

	ZeroMemory(&ofn, sizeof(OPENFILENAME));
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = main;
	ofn.lpstrFile = szFile;
	ofn.nMaxFile = sizeof(szFile);
	ofn.lpstrFilter = "SuperMasterLevel\0*.sml\0";
	ofn.nFilterIndex = 1;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	ofn.lpstrInitialDir = NULL;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
	
	
	if (GetOpenFileName(&ofn)==TRUE) 
	{
		strcpy(cFile, ofn.lpstrFile);
		return true;
	}
	else
	{
		return false;
	}
	
}

bool savefile(char* cFile)
{
	
	char szFile[200];
	
	
	OPENFILENAME ofn;       // common dialog box structure

	
	strcpy(szFile, "*.sml");
	
	// Initialize OPENFILENAME

	ZeroMemory(&ofn, sizeof(OPENFILENAME));
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = main;
	ofn.lpstrFile = szFile;
	ofn.nMaxFile = sizeof(szFile);
	ofn.lpstrFilter = "SuperMasterLevel\0*.sml\0";
	ofn.nFilterIndex = 1;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	ofn.lpstrInitialDir = NULL;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
	
	
	if (GetSaveFileName(&ofn)==TRUE) 
	{
		strcpy(cFile, ofn.lpstrFile);
		return true;
	}
	else
	{
		return false;
	}
	
	
}

/************************************************ lostsidedead.com **********************/