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

📄 dlgsetting.h

📁 caro program is written by VC++ and AI
💻 H
字号:
/****************************************************************************/
//
// ~~~~~~~~~~~~~~~~ Dialog Setting's Functions I ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//							DlgSetting.h
//
//***************************************************************************/



#include <commctrl.h>
	
////////////////////////////////////////////////////////////////////////////
// Setting Dialog Init Message
void Setting_Init()
{
POINT pIconPoint;
RECT rect;
int iTurn;

	////////////////////////////////////////////////////////
	// Get Dialog Setting Size
	GetWindowSize(&DlgSetting);

	/***********************************************************/
	// Game Setting

	// Time Limit EditBox
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),EM_LIMITTEXT,3,0);

	// Language ComboBox
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_LANG),CB_RESETCONTENT,0,0);
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_LANG),CB_INSERTSTRING,0,(LPARAM)"English");
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_LANG),CB_INSERTSTRING,1,(LPARAM)"Ti課g Vi謙");
	
	// Opacity SliderBar
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_SLD_OPACITY), TBM_SETRANGE, TRUE,MAKELONG(20, 100));

	// Rule ComboBox
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_RESETCONTENT,0,0);
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_INSERTSTRING,0,(LPARAM)"Vietnam Caro");
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_INSERTSTRING,1,(LPARAM)"Classic Caro");
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_INSERTSTRING,2,(LPARAM)"Gomoku");
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_INSERTSTRING,3,(LPARAM)"TicTacToe");
	
	// Blocks EditBox
	SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS),EM_LIMITTEXT,3,0);	


	/***********************************************************/
	// Player Setting
	int PlayerIDSpace = IDC_GRP_PLAYER2-IDC_GRP_PLAYER1;

	for( iTurn=0 ; iTurn < MAX_PLAYER; iTurn++)
	{
		// Name Editbox
		SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_EDT_NAME1 + PlayerIDSpace * iTurn ),EM_LIMITTEXT,MAX_PLAYERNAME,0);

		// Icon ( Btn OwnerDraw )
		GetWindowRect(GetDlgItem(DlgSetting.hWnd,IDC_AVATAR1 + PlayerIDSpace * iTurn ),&rect);
		pIconPoint.x = rect.left - DlgSetting.left;
		pIconPoint.y = rect.top - DlgSetting.top;

		MoveWindow(GetDlgItem(DlgSetting.hWnd,IDC_AVATAR1 + PlayerIDSpace * iTurn ),pIconPoint.x , pIconPoint.y , XBLOCK + 1 , XBLOCK + 1 , FALSE );

		// Difficult ( Combobox )
		SendMessage( GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace * iTurn ),CB_RESETCONTENT,0,0);
		SendMessage( GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace * iTurn ),CB_INSERTSTRING,0,(LPARAM)"Easy");
		SendMessage( GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace * iTurn ),CB_INSERTSTRING,1,(LPARAM)"Normal");
		SendMessage( GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace * iTurn ),CB_INSERTSTRING,2,(LPARAM)"Hard");
	}

	SetSetting();
}

////////////////////////////////////////////////////////////////////////////
// Setting Dialog Draw Item Message
void Setting_DrawItem(LPDRAWITEMSTRUCT pdis, WPARAM wParam)
{
int iTurn, x, y;
RECT rect;
int PlayerIDSpace;
TCHAR szBuffer[10]="";

	PlayerIDSpace = IDC_GRP_PLAYER2-IDC_GRP_PLAYER1;

	GetClientRect(pdis->hwndItem,&rect);
	SetBkMode(pdis->hDC,TRANSPARENT);

	for(iTurn = 0; iTurn < MAX_PLAYER; iTurn++)
	{
		////////////////////////////////////////////////////
		// Player Icon Button
		if((int)wParam==IDC_AVATAR1 + PlayerIDSpace * iTurn )
		{
			if(pdis->itemState & ODS_SELECTED)
			{
				MyFrame(pdis->hDC , 0 , 0, rect.right , rect.bottom , RGB(0,0,0));
				for(x=0; x< XBLOCK -1;	x++)
					for(y=0; y< XBLOCK -1;	y++)
					{
						SetPixel(pdis->hDC, 1 + x,  1 + y, avatar[iTurn].fDot[x][y] ? skin.crPColor[iTurn] : skin.crBlock );
					}						
			} // endif ( ODS_SELECTED )
			else
			{
				MyFrame(pdis->hDC , 0 , 0, rect.right , rect.bottom , skin.crBlockBorder);
				for(x=0; x< XBLOCK -1;	x++)
					for(y=0; y< XBLOCK -1;	y++)
					{
						SetPixel(pdis->hDC, 1 + x,  1 + y, avatar[iTurn].fDot[x][y] ? skin.crPColor[iTurn] : skin.crBlock );
					}						
			} //end else if ( ODS_SELECTED )
							
		} // endif ((int)wParam== ... )

	} // end for (i=0.....)
	

	if(pdis->itemState & ODS_FOCUS)
	{
		rect.left   += 2;
		rect.top    += 2;
		rect.right  -= 2;
		rect.bottom -= 2;
		DrawFocusRect(pdis->hDC , &rect);
	}
	
}

////////////////////////////////////////////////////////////////////////////
// Setting Dialog Command Message
void Setting_Command(WPARAM wParam)
{
int x, y;
TCHAR szBuffer[50];
HMENU hMenu;
TCHAR szFileName[MAX_PATH]="";
TCHAR szFilter[] = TEXT ("MIDI Files (*.mid, *.midi, *.rmi)\0*.mid;*.midi;*.rmi\0\0") ;
int iTurn;

	hMenu = GetMenu(WndMain.hWnd);

	///////////////////////////////////////////////////////////////////////////
	// Player Settings
	int PlayerIDSpace = IDC_GRP_PLAYER2-IDC_GRP_PLAYER1;

	for(iTurn = 0; iTurn <MAX_PLAYER; iTurn++ )
	{
		///////////////////////////////////////////////////
		// Player X Name ( Editbox )
		if(LOWORD(wParam)==IDC_EDT_NAME1 + PlayerIDSpace * iTurn && HIWORD(wParam)==EN_KILLFOCUS)
		{
			GetWindowText(GetDlgItem(DlgSetting.hWnd, LOWORD(wParam) ),player[iTurn].szName 
				, GetWindowTextLength(GetDlgItem(DlgSetting.hWnd, LOWORD(wParam) )) + 1 );
			ChangeLang();
			ReDrawBanner();
		}

		///////////////////////////////////////////////////
		// Player X Avatar ( Button )
		if(LOWORD(wParam)==IDC_AVATAR1 + PlayerIDSpace * iTurn)
		{
			ec.iIcon = iTurn;
			DialogBox(ec.hInst ,"IDD_AVATAR",WndMain.hWnd ,DlgIconProc);
			InvalidateRect(GetDlgItem(DlgSetting.hWnd, LOWORD(wParam) ),NULL,FALSE);
		}

		///////////////////////////////////////////////////
		// Player X Edit Avatar ( Button )
		if(LOWORD(wParam)==IDC_BTN_EDITAVATAR1 + PlayerIDSpace * iTurn)
		{
			ec.iIcon = iTurn;
			DialogBox(ec.hInst ,"IDD_AVATAR",WndMain.hWnd ,DlgIconProc);
			InvalidateRect(GetDlgItem(DlgSetting.hWnd, IDC_AVATAR1 + PlayerIDSpace * iTurn ) ,NULL,FALSE);
		}

		///////////////////////////////////////////////////
		// Player X Player / Computer ( Radio Button )
		if(LOWORD(wParam)==IDC_RD_H1 + PlayerIDSpace * iTurn  || LOWORD(wParam)==IDC_RD_C1 + PlayerIDSpace * iTurn )
		{
			CheckMenuItem(hMenu,IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1) * iTurn  + player[iTurn].fPlay ,MF_UNCHECKED);
			player[iTurn].fPlay = !player[iTurn].fPlay ;
			CheckRadioButton(DlgSetting.hWnd, IDC_RD_H1 + PlayerIDSpace * iTurn ,IDC_RD_C1 + PlayerIDSpace * iTurn , player[iTurn].fPlay + IDC_RD_H1 + PlayerIDSpace * iTurn );
			CheckMenuItem(hMenu, IDM_PLAYERS_H1 + (IDM_PLAYERS_H2 - IDM_PLAYERS_H1) * iTurn  + player[iTurn].fPlay ,MF_CHECKED);
			EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_CMB_DIF1 + PlayerIDSpace * iTurn ),player[iTurn].fPlay );
		}

		///////////////////////////////////////////////////
		// Player X Difficult ( ComboBox )
		if((LOWORD(wParam)==IDC_CMB_DIF1 + PlayerIDSpace * iTurn  || LOWORD(wParam)==IDC_CMB_DIF1 + PlayerIDSpace * iTurn ) && HIWORD(wParam)==CBN_SELCHANGE)
		{
			player[iTurn].iDiff = (char)SendMessage(GetDlgItem(DlgSetting.hWnd, LOWORD(wParam) ),CB_GETCURSEL,0,0);
		}
	} // end for ( iTurn .. .)

	switch(LOWORD(wParam))
	{
	///////////////////////////////////////////////////////////////////////////
	// Game Settings

		// Enable Warning
		case IDC_CHK_WARNING:
			setting.fWarning = !setting.fWarning ;
			CheckMenuItem(hMenu,IDM_SETTINGS_WARNING, setting.fWarning?MF_CHECKED:MF_UNCHECKED );

			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;
				}
				
			}

			ReDrawBanner();
			break;
		
		// Time (Checkbox)
		case IDC_CHK_TIME:
			setting.fTime  = !setting.fTime ;
			EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),setting.fTime );
			CheckMenuItem(hMenu,IDM_SETTINGS_TIMELIMIT, setting.fTime?MF_CHECKED:MF_UNCHECKED );
			ReDrawPlayerBar();
			break;

		// Time (Editbox)
		case IDC_EDT_TIME:
			if(HIWORD(wParam)==EN_KILLFOCUS)
			{
				GetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),szBuffer,4);
				if(atoi(szBuffer) >= 5)
				{
					setting.iTime = atoi(szBuffer);
					if( setting.iTime < play.iTimeLimit / CTIME )
					{
						play.iTimeLimit = setting.iTime * CTIME - 1;
						ReDrawPlayerBar();
					}
				}
				else
				{
					MessageBox(WndMain.hWnd, "Time limit must > 4",APPNAME,MB_OK | MB_ICONERROR );
					wsprintf(szBuffer,"%d",setting.iTime );
					SetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),szBuffer);
					SetFocus(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME));
					SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_EDT_TIME),EM_SETSEL,0,3);

				}
			}
			break;

		// Language ( ComboBox )
		case IDC_CMB_LANG:
			if(HIWORD(wParam)==CBN_SELCHANGE)
			{
				setting.iLang = (char)SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_LANG),CB_GETCURSEL,0,0);
				ChangeLang();
			}
			break;

		// Rule ( ComboBox )
		case IDC_CMB_RULE:
			if(HIWORD(wParam)==CBN_SELCHANGE)
			{
				CheckMenuItem(hMenu,setting.iRule + IDM_SETTINGS_RULE_VIETNAM1,MF_UNCHECKED);
				setting.iRule = (char)SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_CMB_RULE),CB_GETCURSEL,0,0);
				CheckMenuItem(hMenu,setting.iRule + IDM_SETTINGS_RULE_VIETNAM1,MF_CHECKED);
				if( rule[setting.iRule].iBlock > 0 )
				{
					setting.iBlock = rule[setting.iRule].iBlock;
					wsprintf(szBuffer,"%d",setting.iBlock);
					SetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS), szBuffer);
					EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS), FALSE);
				}
				else
				{
					setting.iBlock = setting.iNormalBlock;
					wsprintf(szBuffer,"%d",setting.iBlock);
					SetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS), szBuffer);
					EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS), TRUE);
				}
			}
			break;

		// Block
		case IDC_EDT_BLOCKS:
			if(HIWORD(wParam)==EN_KILLFOCUS)
			{
				GetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS),szBuffer,4);
				if(atoi(szBuffer) >= 3 && atoi(szBuffer) <= 100)
				{
					setting.iBlock = atoi(szBuffer);
					setting.iNormalBlock = setting.iBlock;
				}
				else
				{
					MessageBox(WndMain.hWnd , "Amount of Block must => 3 and <= 100",APPNAME,MB_OK | MB_ICONERROR );
					wsprintf(szBuffer,"%d",setting.iBlock);
					SetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS),szBuffer);
					SetFocus(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS));
					SendMessage(GetDlgItem(DlgSetting.hWnd,IDC_EDT_BLOCKS),EM_SETSEL,0,3);
				}
				
			}
			break;

		// Sound ( Check Box )
		case IDC_CHK_SOUND:
			setting.fSound  = !setting.fSound ;
			EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_EDT_SOUND), setting.fSound);
			EnableWindow(GetDlgItem(DlgSetting.hWnd,IDC_BTN_SOUND), setting.fSound);
			CheckMenuItem(hMenu,IDM_SETTINGS_SOUNDON, setting.fSound?MF_CHECKED:MF_UNCHECKED );
			if(setting.fSound)
				PlaySoundFile(WndMain.hWnd, setting.szSoundFile);
			else
				mciSendString("close all",0,0,0);
			break;

		// Sound file ( Editbox )
		case IDC_EDT_SOUND:
			if(HIWORD(wParam)==EN_KILLFOCUS)
			{
				strcpy(szFileName,setting.szSoundFile);
				GetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_SOUND),setting.szSoundFile ,MAX_PATH);
				if(strcmp(szFileName, setting.szSoundFile)) 
					PlaySoundFile(WndMain.hWnd, setting.szSoundFile);
			}
			break;

		// Sound file Browse ( Button )
		case IDC_BTN_SOUND:
			strcpy(szFileName,"");
			if(OpenFileDlg(WndMain.hWnd, szFilter, szFileName))
			{
				SetWindowText(GetDlgItem(DlgSetting.hWnd,IDC_EDT_SOUND),strcpy(setting.szSoundFile, szFileName));
				PlaySoundFile(WndMain.hWnd, setting.szSoundFile);
			}
			break;

	} // end switch(LOWORD(wParam))
	
} // End Setting_Command

⌨️ 快捷键说明

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