⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wndmain2.h

📁 caro program is written by VC++ and AI
💻 H
字号:
/****************************************************************************/
//
// ~~~~~~~~~~~~~~~~ Window Main's Functions II ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//							WndMain2.h
//
//***************************************************************************/



void Setting_ShowPlayers(); // prototypes

//////////////////////////////////////////////////////////////////////////////
// Menu Select Command
void Main_MenuSelect(WPARAM wParam)
{
TCHAR szBuffer[100];

	strcpy(szBuffer,"");
	switch(LOWORD(wParam))
	{
	/******************************************************************/
	// ExCaro Menu
	case IDM_EC_PLAYING:	strcpy(szBuffer, "Go to Playing Mode ( F2 )");				break;
	case IDM_EC_SETTING:	strcpy(szBuffer, "Go to Setting Mode ( F3 )");				break;
	case IDM_EC_CREDIT:		strcpy(szBuffer, "Go to Credit Mode ( F4 )");				break;

	case IDM_EC_FULLSCREEN:	strcpy(szBuffer, "Full Screen ( F11 ). To back normal mode, repress F11");		break;
	case IDM_EC_MENU:		strcpy(szBuffer, "Hide Menu bar ( F12 ). To show menu bar again, repress F12");	break;
	case IDM_EC_EXIT:		strcpy(szBuffer, "Exit Anitsoft ExCaro ( Alt + F4 )");	break;

	/******************************************************************/
	// Setting Menu
	case IDM_PLAYING_NEWGAME:	strcpy(szBuffer,"Start new game ( Ctrl + N )");				break;

	case IDM_PLAYING_UNDO:		strcpy(szBuffer, "Undo this action ( Ctrl + Z )");			break;
	case IDM_PLAYING_REDO:		strcpy(szBuffer, "Redo this action ( Ctrl + Y )");			break;

	case IDM_PLAYING_LOADGAME:	strcpy(szBuffer, "Load game from a file ( Ctrl + O )");		break;
	case IDM_PLAYING_SAVEGAME:	strcpy(szBuffer, "Load game from a file ( Ctrl + O )");		break;

	/******************************************************************/
	// Setting Menu
	case IDM_SETTINGS_WARNING:		strcpy(szBuffer, "Enable/Disable Warning");			break;
	case IDM_SETTINGS_SOUNDON:		strcpy(szBuffer, "Sound on/off");					break;
	case IDM_SETTINGS_TIMELIMIT:	strcpy(szBuffer, "Enable/Disable Time limit");		break;

	/******************************************************************/
	// Help Menu
	case IDM_HELP_CONTENTS:		strcpy(szBuffer, "Help you easy to use ExCaro");			break;
	case IDM_HELP_ABOUT:		strcpy(szBuffer, "Program information and copyright");					break;
	}

	// Load State
	if( LOWORD(wParam) >= IDM_PLAYING_LOADSTATE0 && LOWORD(wParam) <= IDM_PLAYING_LOADSTATE9)
		wsprintf(szBuffer,"Quick load from state. ( Ctrl + %d )", LOWORD(wParam) - IDM_PLAYING_LOADSTATE0 );
	
	// Save State
	if( LOWORD(wParam) >= IDM_PLAYING_SAVESTATE0 && LOWORD(wParam) <= IDM_PLAYING_SAVESTATE9)
		wsprintf(szBuffer,"Quick save to state. ( Shift + %d )", LOWORD(wParam) - IDM_PLAYING_SAVESTATE0 );

	// Rule SubMenu
	if( LOWORD(wParam) >= IDM_SETTINGS_RULE_GOMOKU && LOWORD(wParam) <= IDM_SETTINGS_RULE_TICTACTOE)
		strcpy(szBuffer, "Choose a rule.");

	// Human / Computer Submenu
	if( LOWORD(wParam) >= IDM_PLAYERS_H1 && LOWORD(wParam) <= IDM_PLAYERS_C2)
		strcpy(szBuffer, "Who play ? Player or Computer.");
	ShowStatus(szBuffer);
}

//////////////////////////////////////////////////////////////////////////////
// Menu Command
void Menu_Command(WPARAM wParam)
{
int i, x, y; 
HMENU hMenu;
int PlayerIDSpace;
TCHAR szFileName[MAX_PATH];
TCHAR *szHHDir;
int iLength;

	PlayerIDSpace = IDC_GRP_PLAYER2-IDC_GRP_PLAYER1;
	hMenu = GetMenu(WndMain.hWnd );	
	switch(LOWORD(wParam))
	{
	/******************************************************************/
	// ExCaro Menu
	case IDM_EC_PLAYING:
	case IDM_EC_SETTING:
	case IDM_EC_CREDIT:
		SendMessage(WndMain.hWnd , WM_COMMAND,WPARAM(LOWORD(wParam)-IDM_EC_PLAYING+ID_PLAY),1);
		break;

	case IDM_EC_FULLSCREEN:
		if(setting.fFullScreen)
		{
			ShowWindow(WndMain.hWnd , SW_HIDE);
			SetWindowLong (WndMain.hWnd , GWL_STYLE,WS_OVERLAPPEDWINDOW); // Normal Window
			MoveWindow(WndMain.hWnd , ec.rOldMain.left  , ec.rOldMain.top  , ec.rOldMain.right- ec.rOldMain.left  , ec.rOldMain.bottom - ec.rOldMain.top , TRUE);
			ShowWindow(WndMain.hWnd , SW_SHOW);
		}
		else
		{
			GetWindowRect(WndMain.hWnd , &ec.rOldMain);	// Back up window size for not Full Screen mode
			SetWindowLong (WndMain.hWnd , GWL_STYLE,WS_VISIBLE); //Full Screen
			MoveWindow(WndMain.hWnd ,0,0, GetSystemMetrics(SM_CXSCREEN) , GetSystemMetrics(SM_CYSCREEN) ,TRUE);
		}
		setting.fFullScreen = !setting.fFullScreen;
	break;

	case IDM_EC_MENU:
		if(setting.fMenu)
		{
			hMenu=NULL;
			SetMenu (WndMain.hWnd, hMenu) ;
		}
		else
		{
			hMenu = LoadMenu(ec.hInst , setting.iLang ? "EXCARO_VI" : "EXCARO_EN");
			SetMenu (WndMain.hWnd, hMenu) ;
		}
		setting.fMenu=!setting.fMenu;
		break;

	case IDM_EC_EXIT:
		SendMessage(WndMain.hWnd ,WM_CLOSE,0,0);
		break;

	/******************************************************************/
	// Playing Menu
	case IDM_PLAYING_NEWGAME:
		SendMessage(WndMain.hWnd , WM_COMMAND,WPARAM(MAX_CBUTTON + 0),1);
		break;

	case IDM_PLAYING_LOADGAME:
	case IDM_PLAYING_SAVEGAME:
		SendMessage(WndMain.hWnd , WM_COMMAND,WPARAM(LOWORD(wParam)-IDM_PLAYING_LOADGAME + 1 + MAX_BUTTON),1);
		break;

	case IDM_PLAYING_UNDO:
	case IDM_PLAYING_REDO:
		SendMessage(WndMain.hWnd , WM_COMMAND,WPARAM(LOWORD(wParam)-IDM_PLAYING_UNDO + 3 + MAX_BUTTON),1);
		break;

	/******************************************************************/
	// Settings Menu
	case IDM_SETTINGS_WARNING:
		setting.fWarning = !setting.fWarning;
		SendMessage(GetDlgItem(DlgSetting.hWnd ,IDC_CHK_WARNING),BM_SETCHECK,setting.fWarning,0);

		if(setting.fWarning == TRUE )
		{
			CheckAll(1);
		}
		else
		{
			for(x=0; x < setting.iBlock; x++)
			for(y=0; y < setting.iBlock; y++)
			{
				if( pBlock(x,y) >= MAX_PLAYER )
					posBlock(x,y) = -1;
			}
			
		}

		InvalidateRect(WndPlay.hWnd, NULL, FALSE);
		ReDrawBanner();
		break;

	case IDM_SETTINGS_SOUNDON:
		setting.fSound = !setting.fSound;
		SendMessage(GetDlgItem(DlgSetting.hWnd ,IDC_CHK_SOUND),BM_SETCHECK,setting.fSound,0);
		EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_SOUND), setting.fSound);
		EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_BTN_SOUND), setting.fSound);
		if(setting.fSound)
			PlaySoundFile(WndMain.hWnd , setting.szSoundFile );
		else
			mciSendString("close all",0,0,0);
		break;

	case IDM_SETTINGS_TIMELIMIT:
		setting.fTime = !setting.fTime;
		EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),setting.fTime );
		SendMessage(GetDlgItem(DlgSetting.hWnd ,IDC_CHK_TIME),BM_SETCHECK,setting.fTime,0);
		ReDrawPlayerBar();
		break;

	case IDM_SETTINGS_RULE_VIETNAM1:
	case IDM_SETTINGS_RULE_GOMOKU:
	case IDM_SETTINGS_RULE_CLASSIC:
	case IDM_SETTINGS_RULE_TICTACTOE:
		if (LOWORD(wParam)!= setting.iRule + IDM_SETTINGS_RULE_VIETNAM1)
		{
			CheckMenuItem(hMenu,IDM_SETTINGS_RULE_VIETNAM1 + setting.iRule , MF_UNCHECKED);
			setting.iRule = LOWORD(wParam)-IDM_SETTINGS_RULE_VIETNAM1;
			SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_SETCURSEL,setting.iRule,0);
			NewGame();
		}
		break;

	case IDM_SETTINGS_LANG_EN:
	case IDM_SETTINGS_LANG_VI:
		if (LOWORD(wParam)!= setting.iLang + IDM_SETTINGS_LANG_EN)
		{
			CheckMenuItem(hMenu,IDM_SETTINGS_LANG_EN + setting.iLang , MF_UNCHECKED);
			setting.iLang = LOWORD(wParam)-IDM_SETTINGS_LANG_EN;
			SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_LANG),CB_SETCURSEL,setting.iLang,0);
			ChangeLang();
		}
		break;

	case IDM_HELP_CONTENTS:
		iLength = GetEnvironmentVariable ("SystemRoot", NULL, 0) ;
		szHHDir = (TCHAR*) calloc ( iLength, sizeof(TCHAR));
        GetEnvironmentVariable ("SystemRoot", szHHDir, iLength) ;
		
		wsprintf(szFileName, "%s\\%s",ec.szAppDir ,"help.chm");
		ShellExecute (NULL, "open", "hh.exe", szFileName,szHHDir, SW_SHOWDEFAULT);
		break;

	case IDM_HELP_ABOUT:
			DialogBox(ec.hInst ,"IDD_ABOUT",WndMain.hWnd ,DlgAboutProc);
		break;

	} // end switch (LOWORD(wParam))

	/*******************************************************************/
	// ExCaro Menu > Save / Load State

	// Load State
	if( LOWORD(wParam) >= IDM_PLAYING_LOADSTATE0 && LOWORD(wParam) <= IDM_PLAYING_LOADSTATE9)
	{
		wsprintf(szFileName,"%s\\sav%d.sav", ec.szAppDir , LOWORD(wParam) - IDM_PLAYING_LOADSTATE0 );
		ec.fChooseFile = TRUE;
		LoadGame(szFileName);
		ec.fChooseFile = FALSE;
	}

	// Save State
	if( LOWORD(wParam) >= IDM_PLAYING_SAVESTATE0 && LOWORD(wParam) <= IDM_PLAYING_SAVESTATE9)
	{
		wsprintf(szFileName,"%s\\sav%d.sav", ec.szAppDir , LOWORD(wParam) - IDM_PLAYING_SAVESTATE0 );
		ec.fChooseFile = TRUE;
		SaveGame(szFileName);
		ec.fChooseFile = FALSE;
	}

	/******************************************************************/
	// Players Menu

	// Player or Computer
	if(LOWORD(wParam)>=IDM_PLAYERS_H1 && LOWORD(wParam)<=IDM_PLAYERS_C2) // Warning : If change, should add { }
	for(i=0;i<MAX_PLAYER;i++)
	{
		if(LOWORD(wParam)-(IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1 )*i)==1 || LOWORD(wParam)-(IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1 )*i)==0)
		{
			CheckMenuItem(hMenu,IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1)*i + player[i].fPlay ,MF_UNCHECKED);
			player[i].fPlay = (LOWORD(wParam) - ( IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1 )*i ))?1:0;
			CheckRadioButton(DlgSetting.hWnd,IDC_RD_H1 + PlayerIDSpace*i,IDC_RD_C1 + PlayerIDSpace*i, player[i].fPlay + IDC_RD_H1 + PlayerIDSpace*i);
			EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace*i),player[i].fPlay );
			CheckComFirst();
		}
	}
}


/////////////////////////////////////////////////////////////////////////////////
// WndMain Key Down Message
void Main_KeyDown(WPARAM wParam)
{
POINT pTemp;
bool fKeyOther = FALSE;

if(!play.fWin && !play.fComPlay )
{
	pTemp.x = ec.pMouse.x < 0 ? siH.nPos + siH.nPage /2 : ec.pMouse.x;
	pTemp.y = ec.pMouse.y < 0 ? siV.nPos + siV.nPage /2 : ec.pMouse.y;

	switch(wParam)
	{
	case VK_UP:
		if(pTemp.y<= siV.nPos )
		{
			SendMessage(WndChild.hWnd,WM_VSCROLL,SB_LINEUP,0);
		}
		pTemp.y = max(pTemp.y -1, 0 );
		break;

	case VK_DOWN:
		if(pTemp.y >= int(siV.nPos + siV.nPage) )
		{
			SendMessage(WndChild.hWnd,WM_VSCROLL,SB_LINEDOWN,0);
		}
		pTemp.y = min(pTemp.y +1, setting.iBlock -1);
		break;

	case VK_LEFT:
		if(pTemp.x<= siH.nPos )
		{
			SendMessage(WndChild.hWnd,WM_HSCROLL,SB_LINELEFT,0);
		}
		pTemp.x = max(pTemp.x -1, 0 );
		break;

	case VK_RIGHT:
		if(pTemp.x >= int (siH.nPos + siH.nPage))
		{
			SendMessage(WndChild.hWnd,WM_HSCROLL,SB_LINERIGHT,0);
		}
		pTemp.x = min(pTemp.x +1, setting.iBlock -1);
		break;

	case VK_HOME:
		if(GetKeyState(VK_CONTROL)<0) // Ctrl + Home
		{
			play.siVPlay = 0;
			play.siHPlay = 0;
			pTemp.x = 0;
			pTemp.y = 0;
		}
		else // Home Only
		{
			play.siHPlay = 0;
			pTemp.x = 0;
		}
		SendMessage(WndChild.hWnd , WM_SIZE, 0, 0 );
		break;

	case VK_END:
		if(GetKeyState(VK_CONTROL)<0) // Ctrl + End
		{
			play.siVPlay = setting.iBlock -1;
			play.siHPlay = setting.iBlock -1;
			pTemp.x = setting.iBlock -1;
			pTemp.y = setting.iBlock -1;
		}
		else // End Only
		{
			play.siHPlay = setting.iBlock -1;
			pTemp.x = setting.iBlock -1;
		}
		SendMessage(WndChild.hWnd , WM_SIZE, 0, 0 );
		break;

	case VK_NEXT:
		if(siV.nPos == siV.nMax )
			pTemp.y = setting.iBlock -1;
		else
		{
			play.siVPlay += siV.nPage ;
			pTemp.y = min( int(pTemp.y + siV.nPage), int( setting.iBlock -1) );

			SendMessage(WndChild.hWnd , WM_SIZE, 0, 0 );
		}
		break;

	case VK_PRIOR:
		if(siV.nPos == siV.nMin )
			pTemp.y = 0;
		else
		{
			play.siVPlay = play.siVPlay - siV.nPage;
			pTemp.y = max( 0 , int ( pTemp.y - siV.nPage ));
		
			SendMessage(WndChild.hWnd , WM_SIZE, 0, 0 );
		}
		break;

	case VK_RETURN:
	case VK_SPACE:
		play.fKey = FALSE;
		ClickBlock(pTemp.x , pTemp.y );
		break;

	default:
		fKeyOther = TRUE;
		break;
	}

	// A required key pressed !
	if( !play.fWin && !fKeyOther && (pTemp.x != ec.pMouse.x || pTemp.y != ec.pMouse.y ))
	{
		play.fKey = TRUE;
		MoveHiLight(pTemp.x , pTemp.y );
	}
}
}

void Main_MouseWheel(WPARAM wParam)
{
	// Scroll Up
	if ((short)HIWORD(wParam)>0)
	{
		// While pressing Shift
		if( GetAsyncKeyState(VK_SHIFT)<0 )
		{
			if( ec.iTab == ID_PLAY)
				SendMessage(WndChild.hWnd,WM_HSCROLL,SB_LINERIGHT,0);
		}
		else // not pressing Shift
		{
			if( ec.iTab == ID_PLAY || ec.iTab == ID_SETTING)
				SendMessage(WndChild.hWnd,WM_VSCROLL,SB_LINEUP,0);	
		}
	}

	// Scroll Down
	if ((short)HIWORD(wParam)<0)
	{
		if( GetAsyncKeyState(VK_SHIFT)<0)
		{
			if(ec.iTab == ID_PLAY)
				SendMessage(WndChild.hWnd,WM_HSCROLL,SB_LINELEFT,0);
		}
		else
		{
			if( ec.iTab == ID_PLAY || ec.iTab == ID_SETTING)
				SendMessage(WndChild.hWnd,WM_VSCROLL,SB_LINEDOWN,0);	
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -