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()