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