#include <Windows.h>
#include "resource.h"
#include <commctrl.h>
#include <Windowsx.h>
#include <string>
using namespace std;
#define TAB_HERO 0
#define TAB_ABILITY1 1
#define TAB_ABILITY2 2
#define TAB_ABILITY3 3
#define TAB_ABILITY4 4
#define TAB_SLOT 5
char TabName[TAB_SLOT][32] = {"Hero", "Ability 1", "Ability 2", "Ability 3", "Ability 4"};
HWND hTabs[TAB_SLOT];
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#pragma comment(lib, "ComCtl32.Lib")
HINSTANCE g_hInst;
HWND hTab;
int TabControlInit(HWND hwndParent);
HRESULT OnSize(HWND hwndTab, LPARAM lParam);
void SetDefaultFont (HWND hwnd);
void ShowTab(int a);
int iCTab;
BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TabOneDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TabTwoDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TabThreeDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TabFourDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TabFiveDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#define MY_WM_INITDIALOG (WM_USER + 1)
struct HeroInfo
{
string Name;
int Faction;
string Icon;
string Portrait;
string Model;
string PassiveEffect;
string RespawnEffect;
string SelectedSound;
string SelectedFlavourSound;
string ConfirmMoveSound;
string ConfirmAttackSound;
string NoManaSound;
string CooldownSound;
string AnnouncerSound;
string TauntedSound;
string TauntKillSound;
string Category;
int Diff;
int MoveSpeed;
int TurnRate;
int TurnSmoothing;
int MaxHP;
int MaxMana;
int Armor;
int MArmor;
int HPRegen;
int MRegen;
int Inventory[9];
int AttackDuration;
int AttackActionTime;
int AttackCooldown;
int DamageMin;
int DamageMax;
int AttackNumAnims;
int AttackOffset[3];
string AttackProjectile;
int AttackRange;
string AttackStartEffect;
string AttackImpactEffect;
string AttackActionEffect;
string AttackType;
string CombatType;
string PrimaryAtt;
int Stats[3];
float StatsPL[3];
string PreviewModel;
int PreviewPos[3];
int PreviewAngles[3];
int PreviewScale;
string StoreModel;
int StorePos[3];
int StoreAngles[3];
int StoreScale;
string RItem[12];
};
HeroInfo Hero;
string Faction[2] = {"Legion", "Hellbourne"};
INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR lpCmdLine, INT nShowCmd)
{
UNREFERENCED_PARAMETER(hPrevInst);
UNREFERENCED_PARAMETER(lpCmdLine);
g_hInst = hInst;
WNDCLASSEX wClass;
ZeroMemory(&wClass,sizeof(WNDCLASSEX));
wClass.cbClsExtra=0;
wClass.cbSize=sizeof(WNDCLASSEX);
wClass.cbWndExtra=DLGWINDOWEXTRA;
wClass.hbrBackground=(HBRUSH)(COLOR_BTNFACE + 1);
wClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wClass.hIcon=LoadIcon(hInst, (LPCSTR)IDI_ICON1);
wClass.hIconSm=wClass.hIcon;
wClass.hInstance=hInst;
wClass.lpfnWndProc=(WNDPROC)MainDlgProc;
wClass.lpszClassName="HON HC";
wClass.lpszMenuName=NULL;
wClass.style=CS_HREDRAW | CS_VREDRAW;
if(!RegisterClassEx(&wClass))
{
int nResult = GetLastError();
MessageBox(NULL, "Window Class Creation Failed!", NULL, MB_ICONERROR | MB_OK);
return 0;
}
HWND hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, NULL);
if(!hWnd)
{
int nResult = GetLastError();
MessageBox(NULL, "Dialog Creation Failed!", NULL, MB_ICONERROR | MB_OK);
return 0;
}
hTab = GetDlgItem(hWnd, IDC_TABCONTROL);
int TCW = TabControlInit(hWnd);
if(TCW == 0)
{
MessageBox(hWnd, "Cannot initialize Tab Control!", NULL, MB_ICONERROR);
return 0;
}
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
while(GetMessage(&msg, NULL, 0, 0) == TRUE)
{
if(!IsDialogMessage(hWnd, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
ShowWindow(hTabs[0], TRUE);
iCTab = 0;
}
break;
case WM_SIZE:
{
OnSize(hTab, lParam);
break;
}
case WM_NOTIFY:
{
LPNMHDR lpnmhdr = (LPNMHDR)lParam;
if(lpnmhdr -> code == TCN_SELCHANGE)
{
int iTabItem = TabCtrl_GetCurSel(hTab);
switch (iTabItem)
{
case TAB_HERO:
{
ShowTab(iTabItem);
break;
}
case TAB_ABILITY1:
{
ShowTab(iTabItem);
break;
}
case TAB_ABILITY2:
{
ShowTab(iTabItem);
break;
}
case TAB_ABILITY3:
{
ShowTab(iTabItem);
break;
}
case TAB_ABILITY4:
{
ShowTab(iTabItem);
break;
}
}
}
break;
}
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int TabControlInit(HWND hwndParent)
{
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icex);
RECT rcClient;
GetClientRect(hwndParent, &rcClient);
if (hTab == NULL)
return 0;
if (!SetWindowPos(hTab, HWND_TOP, 0, 0, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
SetDefaultFont(hTab);
TCITEM tie;
tie.mask = TCIF_TEXT;
for (int i = 0; i < TAB_SLOT; i++)
{
tie.pszText = TabName[i];
if (TabCtrl_InsertItem(hTab, i, &tie) == -1)
{
DestroyWindow(hTab);
return 0;
}
}
RECT rcTab;
TabCtrl_GetItemRect(hTab, 0, &rcTab);
hTabs[0] = CreateDialog(g_hInst, MAKEINTRESOURCE(TAB_ONE), hTab, TabOneDlgProc);
if (!SetWindowPos(hTabs[0], HWND_TOP, rcClient.left+1, rcClient.top+21, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
hTabs[1] = CreateDialog(g_hInst, MAKEINTRESOURCE(TAB_TWO), hTab, TabTwoDlgProc);
if (!SetWindowPos(hTabs[1], HWND_TOP, rcClient.left+1, rcClient.top+21, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
hTabs[2] = CreateDialog(g_hInst, MAKEINTRESOURCE(TAB_THREE), hTab, TabThreeDlgProc);
if (!SetWindowPos(hTabs[2], HWND_TOP, rcClient.left+1, rcClient.top+21, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
hTabs[3] = CreateDialog(g_hInst, MAKEINTRESOURCE(TAB_FOUR), hTab, TabFourDlgProc);
if (!SetWindowPos(hTabs[3], HWND_TOP, rcClient.left+1, rcClient.top+21, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
hTabs[4] = CreateDialog(g_hInst, MAKEINTRESOURCE(TAB_FIVE), hTab, TabFiveDlgProc);
if (!SetWindowPos(hTabs[4], HWND_TOP, rcClient.left+1, rcClient.top+21, rcClient.right, rcClient.bottom, SWP_SHOWWINDOW))
return 0;
for(int a = 0; a < TAB_SLOT; a++)
{
ShowWindow(hTabs[a], FALSE);
}
return 1;
}
HRESULT OnSize(HWND hwndTab, LPARAM lParam)
{
if (hwndTab == NULL)
return E_INVALIDARG;
if (!SetWindowPos(hwndTab, HWND_TOP, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), SWP_SHOWWINDOW))
return E_FAIL;
return S_OK;
}
void SetDefaultFont (HWND hwnd)
{
SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)true);
}
void ShowTab(int a)
{
ShowWindow(hTabs[iCTab], FALSE);
ShowWindow(hTabs[a], TRUE);
iCTab = a;
}
BOOL CALLBACK TabOneDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
SendMessage(GetDlgItem(hWnd, IDC_FACTION), CB_ADDSTRING, NULL, (LPARAM)Faction[0].c_str());
SendMessage(GetDlgItem(hWnd, IDC_FACTION), CB_ADDSTRING, NULL, (LPARAM)Faction[1].c_str());
SendMessage(GetDlgItem(hWnd, IDC_FACTION), CB_SETCURSEL, (WPARAM)1, NULL);
}
break;
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
BOOL CALLBACK TabTwoDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
}
break;
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
BOOL CALLBACK TabThreeDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
}
break;
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
BOOL CALLBACK TabFourDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
}
break;
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
BOOL CALLBACK TabFiveDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case MY_WM_INITDIALOG:
{
}
break;
case WM_CREATE:
{
PostMessage(hWnd, MY_WM_INITDIALOG, 0, 0);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
}
break;
}
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}