www.pudn.com > coolMEMORY.rar > AdvancedGameMenu.cpp
//-----------------------------------------------------------------------------
// File: AdvancedGameMenu.cpp
//-----------------------------------------------------------------------------
#include "AS\AS_Engine.h"
#include "ModuleHeaders.h"
// Variables: *****************************************************************
HWND hWndAdvancedGameMenu; // Window handle of the advanced game menu dialog
POINT MousePos, // The current mouse position
LastMousePos; // The last mouse position
BOOL bMoveDialog; // Should the dialog be moved?
///////////////////////////////////////////////////////////////////////////////
// Functions: *****************************************************************
void OpenAdvancedGameMenuDialog(void);
LRESULT CALLBACK AdvancedGameMenuProc(HWND, UINT, WPARAM, LPARAM);
void SetupAdvancedGameMenu(void);
void SetAdvancedGameMenuLanguage(void);
///////////////////////////////////////////////////////////////////////////////
void OpenAdvancedGameMenuDialog(void)
{ // begin OpenAdvancedGameMenuDialog()
char byTemp[256];
_AS->SetActive(FALSE);
if(_ASConfig->bFullScreen && _AS->bFullScreen)
{
_ASConfig->bFullScreen = FALSE;
ChangeDisplayMode();
SendMessage(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
_ASConfig->bFullScreen = TRUE;
_AS->bFullScreen = FALSE;
}
DialogBox(_AS->GetInstance(), MAKEINTRESOURCE(IDD_ADVANCED_GAME_MENU), *_AS->pWindow[GAME_WINDOW_ID].GethWnd(), (DLGPROC) AdvancedGameMenuProc);
sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath);
cGameConfig.SaveAdvancedSettings(byTemp);
_AS->SetActive(TRUE);
if(!_AS->bFullScreen && _ASConfig->bFullScreen)
{
_AS->bFullScreen = _ASConfig->bFullScreen;
ChangeDisplayMode();
}
} // begin OpenAdvancedGameMenuDialog()
LRESULT CALLBACK AdvancedGameMenuProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{ // begin AdvancedGameMenuProc()
char byTemp[256];
int i, iX, iY;
RECT Rect;
switch(iMessage)
{
case WM_INITDIALOG:
_AS->WriteLogMessage("Open advanced game menu dialog");
hWndAdvancedGameMenu = hWnd;
SetAdvancedGameMenuLanguage();
SetupAdvancedGameMenu();
return TRUE;
case WM_LBUTTONDOWN:
bMoveDialog = TRUE;
GetCursorPos(&MousePos);
memcpy(&LastMousePos, &MousePos, sizeof(POINT));
break;
case WM_LBUTTONUP: bMoveDialog = FALSE; break;
case WM_MOUSEMOVE:
if(!bMoveDialog)
break;
GetCursorPos(&MousePos);
GetWindowRect(hWnd, &Rect);
// Check if the mouse is in the loader area:
if(MousePos.x > Rect.left &&
MousePos.x < Rect.right &&
MousePos.y > Rect.top &&
MousePos.y < Rect.bottom)
{ // Yea, we are inside:
iX = MousePos.x-LastMousePos.x;
iY = MousePos.y-LastMousePos.y;
memcpy(&LastMousePos, &MousePos, sizeof(POINT));
SetWindowPos(hWnd, HWND_NOTOPMOST,
Rect.left+iX, Rect.top+iY,
Rect.right-Rect.left, Rect.bottom-Rect.top, 0);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
// Advanced game configurations:
case IDC_AGM_SHOW_CARTS_AT_BEGINNING:
cGameConfig.bShowCardsAtBeginning = SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING, BM_GETCHECK, 0, 0L);
SetupAdvancedGameMenu();
break;
case IDC_AGM_TIME_LIMIT:
cGameConfig.bTimeLimit = SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT, BM_GETCHECK, 0, 0L);
SetupAdvancedGameMenu();
break;
case IDC_AGM_ERROR_LIMIT:
cGameConfig.bErrorLimit = SendDlgItemMessage(hWnd, IDC_AGM_ERROR_LIMIT, BM_GETCHECK, 0, 0L);
SetupAdvancedGameMenu();
break;
case IDC_AGM_MUSIC:
i = (int) SendDlgItemMessage(hWnd, IDC_AGM_MUSIC, CB_GETCURSEL, 0, 0L);
if(i < 0 || i >= iFoundMusic)
break; // Incorrect music file!!
StartMusic(pbyFoundMusic[i]);
break;
case IDC_AGM_OK:
EndDialog(hWnd, FALSE);
hWndAdvancedGameMenu = NULL;
_AS->SetNextModule(MODULE_MENU);
_AS->WriteLogMessage("Close advanced game menu dialog");
return TRUE;
case IDC_AGM_CANCEL:
sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath);
cGameConfig.LoadAdvancedSettings(byTemp);
SendMessage(hWnd, WM_COMMAND, IDC_AGM_OK, 0);
break;
case IDC_AGM_SET_STANDART:
cGameConfig.bShowCardsAtBeginning = TRUE;
cGameConfig.iBeginningShowTime = 5;
cGameConfig.bTimeLimit = TRUE;
cGameConfig.iTimeLimit = 60;
cGameConfig.bThinkTimeLimit = TRUE;
cGameConfig.iThinkTime = 10;
cGameConfig.bErrorLimit = TRUE;
cGameConfig.iErrors = 5;
cGameConfig.iRounds = 1;
StartMusic(_AS->byStandartMusic);
SetupAdvancedGameMenu();
break;
}
break;
case WM_NOTIFY:
switch(wParam)
{
case IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME:
cGameConfig.iBeginningShowTime = (int) SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME, TBM_GETPOS, 0, 0);
sprintf(byTemp, "%d", cGameConfig.iBeginningShowTime);
SetDlgItemText(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME_NUMBER, byTemp);
break;
case IDC_AGM_TIME_LIMIT_TIME:
cGameConfig.iTimeLimit = (int) SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT_TIME, TBM_GETPOS, 0, 0);
sprintf(byTemp, "%d", cGameConfig.iTimeLimit);
SetDlgItemText(hWnd, IDC_AGM_TIME_LIMIT_TIME_NUMBER, byTemp);
break;
case IDC_AGM_ROUNDS:
cGameConfig.iRounds = (int) SendDlgItemMessage(hWnd, IDC_AGM_ROUNDS, TBM_GETPOS, 0, 0);
sprintf(byTemp, "%d", cGameConfig.iRounds);
SetDlgItemText(hWnd, IDC_AGM_ROUNDS_NUMBER, byTemp);
break;
case IDC_AGM_ERRORS:
cGameConfig.iErrors = (int) SendDlgItemMessage(hWnd, IDC_AGM_ERRORS, TBM_GETPOS, 0, 0);
sprintf(byTemp, "%d", cGameConfig.iErrors);
SetDlgItemText(hWnd, IDC_AGM_ERRORS_NUMBER, byTemp);
break;
}
break;
case WM_CLOSE: SendMessage(hWnd, WM_COMMAND, IDC_AGM_CANCEL, 0); break;
}
return FALSE;
} // end AdvancedGameMenuProc()
void SetupAdvancedGameMenu(void)
{ // begin SetupAdvancedGameMenu()
HWND hWnd = hWndAdvancedGameMenu;
char byTemp[256];
int i;
SetWindowText(hWndAdvancedGameMenu, T_AdvancedGameMenu);
// Show carts at beginning:
SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING, BM_SETCHECK, cGameConfig.bShowCardsAtBeginning, 0L);
if(!cGameConfig.bShowCardsAtBeginning)
EnableWindow(GetDlgItem(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME), FALSE);
else
EnableWindow(GetDlgItem(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME), TRUE);
SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME, TBM_SETRANGE, FALSE, MAKELONG(1, 10));
SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME, TBM_SETTIC, TRUE, 10);
SendDlgItemMessage(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME, TBM_SETPOS, TRUE, (long) cGameConfig.iBeginningShowTime);
sprintf(byTemp, "%d", cGameConfig.iBeginningShowTime);
SetDlgItemText(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME_NUMBER, byTemp);
// Time limit:
SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT, BM_SETCHECK, cGameConfig.bTimeLimit, 0L);
if(!cGameConfig.bTimeLimit)
EnableWindow(GetDlgItem(hWnd, IDC_AGM_TIME_LIMIT_TIME), FALSE);
else
EnableWindow(GetDlgItem(hWnd, IDC_AGM_TIME_LIMIT_TIME), TRUE);
SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT_TIME, TBM_SETRANGE, FALSE, MAKELONG(10, 400));
SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT_TIME, TBM_SETTIC, TRUE, 250);
SendDlgItemMessage(hWnd, IDC_AGM_TIME_LIMIT_TIME, TBM_SETPOS, TRUE, (long) cGameConfig.iTimeLimit);
sprintf(byTemp, "%d", cGameConfig.iTimeLimit);
SetDlgItemText(hWnd, IDC_AGM_TIME_LIMIT_TIME_NUMBER, byTemp);
// Errors:
SendDlgItemMessage(hWnd, IDC_AGM_ERROR_LIMIT, BM_SETCHECK, cGameConfig.bErrorLimit, 0L);
if(!cGameConfig.bTimeLimit)
EnableWindow(GetDlgItem(hWnd, IDC_AGM_ERRORS), FALSE);
else
EnableWindow(GetDlgItem(hWnd, IDC_AGM_ERRORS), TRUE);
SendDlgItemMessage(hWnd, IDC_AGM_ERRORS, TBM_SETRANGE, FALSE, MAKELONG(1, 10));
SendDlgItemMessage(hWnd, IDC_AGM_ERRORS, TBM_SETTIC, TRUE, 5);
SendDlgItemMessage(hWnd, IDC_AGM_ERRORS, TBM_SETPOS, TRUE, (long) cGameConfig.iErrors);
sprintf(byTemp, "%d", cGameConfig.iErrors);
SetDlgItemText(hWnd, IDC_AGM_ERRORS_NUMBER, byTemp);
// Rounds:
SendDlgItemMessage(hWnd, IDC_AGM_ROUNDS, TBM_SETRANGE, FALSE, MAKELONG(1, 10));
SendDlgItemMessage(hWnd, IDC_AGM_ROUNDS, TBM_SETPOS, TRUE, (long) cGameConfig.iRounds);
sprintf(byTemp, "%d", cGameConfig.iRounds);
SetDlgItemText(hWnd, IDC_AGM_ROUNDS_NUMBER, byTemp);
// Fill in the found music files:
SendDlgItemMessage(hWnd, IDC_AGM_MUSIC, CB_RESETCONTENT, 0, 0);
for(i = 0; i < iFoundMusic; i++)
SendDlgItemMessage(hWnd, IDC_AGM_MUSIC, CB_ADDSTRING, 0, (LONG)(LPSTR) pbyFoundMusic[i]);
// Select the right thing's:
for(i = 0; i < iFoundMusic; i++)
if(!strcmp(pbyFoundMusic[i], byCurrentMusic))
break;
SendDlgItemMessage(hWnd, IDC_AGM_MUSIC, CB_SETCURSEL, i, 0L);
} // end SetupAdvancedGameMenu()
void SetAdvancedGameMenuLanguage(void)
{ // begin SetAdvancedGameMenuLanguage()
HWND hWnd = hWndAdvancedGameMenu;
// Set texts:
SetDlgItemText(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING, T_ShowCardsAtBeginning);
SetDlgItemText(hWnd, IDC_AGM_SHOW_CARTS_AT_BEGINNING_TIME_TS, T_Seconds);
SetDlgItemText(hWnd, IDC_AGM_TIME_LIMIT, T_TimeLimit);
SetDlgItemText(hWnd, IDC_AGM_TIME_LIMIT_TIME_TS, T_Seconds);
SetDlgItemText(hWnd, IDC_AGM_ROUNDS_T, T_Rounds);
SetDlgItemText(hWnd, IDC_AGM_ERROR_LIMIT, T_ErrorLimit);
SetDlgItemText(hWnd, IDC_AGM_MUSIC_T, T_Music);
SetDlgItemText(hWnd, IDC_AGM_OK, T_Ok);
SetDlgItemText(hWnd, IDC_AGM_CANCEL, T_Cancel);
SetDlgItemText(hWnd, IDC_AGM_SET_STANDART, T_SetStandart);
} // end SetAdvancedGameMenuLanguage()