📄 dlgsetting.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 + -