📄 main.c
字号:
case IDM_TIME:
lpfnDlgProc = MakeProcInstance ( TimeDlgProc, hInst);
DialogBox ( hInst, MAKEINTRESOURCE(TIME), hWnd, lpfnDlgProc);
FreeProcInstance ( lpfnDlgProc);
break;
case IDM_RANDOM:
dither = (dither)?0:DITHER;
break;
case IDM_EASY:
flag.easy = !flag.easy;
if (flag.easy && flag.searching && player==opponent)
flag.timeout=true;
break;
case IDM_DEPTH:
lpszTitle=CP[61];
DlgInt1=MaxSearchDepth;
lpfnDlgProc = MakeProcInstance ( GetNumDlgProc, hInst);
if (DialogBoxParam ( hInst, MAKEINTRESOURCE(NUMDLG), hWnd,
lpfnDlgProc,47L)) MaxSearchDepth=DlgInt1;
FreeProcInstance ( lpfnDlgProc);
TCflag = !(MaxSearchDepth > 0);
break;
case IDM_REVERSE:
flag.reverse=!flag.reverse;
if(selected) {selectX=7-selectX; selectY=7-selectY;}
InvalidateRect(hWnd,0,true);
break;
case IDM_BACKGROUND:
if (GetColor(clrBackGround))
{
clrBackGround=cc.rgbResult;
InvalidateRect(hWnd,0,true);
DeleteObject (hBrushBackGround);
hBrushBackGround = CreateSolidBrush ( clrBackGround );
}
break;
case IDM_BLACKSQUARE:
if (GetColor(clrBlackSquare))
{
clrBlackSquare=cc.rgbResult;
UpdateDisplay(0, 0, 1, 0, 0);
}
break;
case IDM_WHITESQUARE:
if (GetColor(clrWhiteSquare))
{
clrWhiteSquare=cc.rgbResult;
UpdateDisplay(0, 0, 1, 0, 0);
}
break;
case IDM_BLACKPIECE:
if (GetColor(clrBlackPiece))
{
clrBlackPiece=cc.rgbResult;
UpdateDisplay(0, 0, 1, 0, 0);
}
break;
case IDM_WHITEPIECE:
if (GetColor(clrWhitePiece))
{
clrWhitePiece=cc.rgbResult;
UpdateDisplay(0, 0, 1, 0, 0);
}
break;
case IDM_TEXT:
if (GetColor(clrText))
{
clrText=cc.rgbResult;
InvalidateRect (hWnd, NULL, TRUE);
}
break;
case IDM_EDGE:
if (GetColor(clrEdge))
{
clrEdge=cc.rgbResult;
UpdateDisplay(0, 0, 1, 0, 0);
}
break;
case IDM_DEFAULT:
LoadDefaultColors();
DeleteObject(hBrushBackGround);
hBrushBackGround=CreateSolidBrush(clrBackGround);
InvalidateRect(hWnd,0,true);
break;
case IDM_SMALL:
case IDM_MEDIUM:
case IDM_LARGE:
{
SHORT i;
CheckMenuItem ( GetMenu(hWnd), boardsize/12+IDM_SMALL,
MF_UNCHECKED);
boardsize=(LOWORD(wParam)-IDM_SMALL)*12;
CheckMenuItem ( GetMenu(hWnd), LOWORD(wParam), MF_CHECKED);
for (i=pawn;i<=king;i++)
{ DeleteObject(pieces[i].detail);
DeleteObject(pieces[i].mask);
pieces[i].detail = LoadBitmap (hInst, MAKEINTRESOURCE(i+boardsize));
pieces[i].mask = LoadBitmap (hInst, MAKEINTRESOURCE(i+boardsize+6));
}
InitScreen();
MoveStatics();
SizeWindow(0);
InvalidateRect(hWnd,0,TRUE);
break;
}
case IDM_3D:
squarebd=0;
goto changebd;
case IDM_SQUARE:
squarebd=1;
changebd:
InitScreen();
MoveStatics();
SizeWindow(0);
InvalidateRect(hWnd,0,TRUE);
break;
case IDM_HINT:
GiveHint();
break;
case IDM_INDEX:
if (!WinHelp(hWnd,szHelpFile,HELP_CONTENTS,0L))
ShowMessage("Could not open gnuchess.hlp");
break;
case IDM_HELP:
if (!WinHelp(hWnd,"winhelp.hlp",HELP_HELPONHELP,0L))
ShowMessage("Could not open winhelp.hlp");
break;
case IDM_ABOUT:
lpfnDlgProc = MakeProcInstance ( AboutDlgProc, hInst);
DialogBox (hInst,MAKEINTRESOURCE(ABOUT),hWnd,lpfnDlgProc);
FreeProcInstance ( lpfnDlgProc);
break;
case IDM_CLEAR: /*editing*/
{
short i;
for (i=0;i<64;i++){board[i]=no_piece;color[i]=neutral;}
}
board[4]=board[60]=king;
color[4]=white;
color[60]=black;
selected=0;
UpdateDisplay(0,0,1,0,0);
break;
case IDM_RESTORE: /*editing*/
{
short i;
for (i=0;i<64;i++)
{
board[i]=Stboard[i];
color[i]=Stcolor[i];
}
selected=0;
UpdateDisplay(0,0,1,0,0);
break;
}
case IDM_PREV: /*replay*/
case IDM_NEXT:
case IDM_DONE: /*editing*/
command=LOWORD(wParam);
}
return 0;
case WM_INITMENUPOPUP:
if (!flag.editing) switch (lParam)
{
case 0: /*Game menu*/
EnableMenuItem ( (HMENU)wParam, IDM_SAVE,
(GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
EnableMenuItem ( (HMENU)wParam, IDM_LIST,
(GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
break;
case 1: /*Edit Menu */
EnableMenuItem ( (HMENU)wParam, IDM_REVIEW,
(GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
EnableMenuItem ( (HMENU)wParam, IDM_UNDO,
(GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
EnableMenuItem ( (HMENU)wParam, IDM_REMOVE,
((flag.searching ? OrigGameCnt : GameCnt)>1
? MF_ENABLED : MF_GRAYED) );
break;
case 2: /* Options Menu */
CheckMenuItem ( (HMENU)wParam, IDM_HASH,
flag.hash?MF_CHECKED:MF_UNCHECKED);
EnableMenuItem ( (HMENU)wParam, IDM_HASH,
(hashfile ? MF_ENABLED : MF_GRAYED) );
CheckMenuItem ( (HMENU)wParam, IDM_COORD,
flag.coords?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_BEEP,
flag.beep?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_BOOK,
flag.usebook?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_POST,
flag.post?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_ANIMATE,
flag.animate?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_MATERIAL,
flag.material?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_RCPTR,
flag.rcptr?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_THREAT,
flag.threat?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_PVS,
flag.pvs?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_NEWEVAL,
flag.neweval?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_GAMEIN,
flag.gamein?MF_CHECKED:MF_UNCHECKED);
break;
case 3: /*skill menu*/
CheckMenuItem ( (HMENU)wParam, IDM_RANDOM,
dither?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_EASY,
flag.easy?MF_CHECKED:MF_UNCHECKED);
break;
case 4: /*Side menu*/
{
int color=flag.bothsides ? 2
: computer^(flag.force & forcing);
CheckMenuItem ( (HMENU)wParam, IDM_REVERSE,
flag.reverse?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_BLACK,
(color==black)?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_WHITE,
(color==white)?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_BOTH,
flag.bothsides?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_WTM,
player==white?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_BTM,
player==black?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_FORCE,
flag.force == false ? MF_UNCHECKED : MF_CHECKED);
}
case 5: /*Board menu */
CheckMenuItem ( (HMENU)wParam, IDM_SQUARE,
squarebd?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem ( (HMENU)wParam, IDM_3D,
squarebd?MF_UNCHECKED:MF_CHECKED);
}
return 0;
case WM_SYSCOLORCHANGE:
DeleteObject(hDlgBkgrnd);
hDlgBkgrnd=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
return 0;
case WM_DESTROY:
flag.quit=true;
flag.timeout=flag.abort=true;
flag.bothsides=false;
command=IDM_QUIT;
GetWindowRect(hWnd,&wr);
maximized=IsZoomed(hWnd);
if (IsIconic(hWnd)) wr.right = 0;
WinHelp(hWnd,szHelpFile,HELP_QUIT,0L);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}
void SizeWindow(int move)
{
RECT wr;
WinSizeX=LEFTMARGIN+sqwidthB*8+deltaX/2+20+CompMoveExt
+GetSystemMetrics(SM_CXFRAME)*2;
WinSizeY=BACKMARGIN+sqdepth*8+BRD_EDGE+LineSpace+SLineSpace+5
+GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME)*2
+GetSystemMetrics(SM_CYMENU);
GetWindowRect(GetDesktopWindow(),&wr);
if (wr.right-wr.left > WinSizeX) WinPosX = (wr.right-WinSizeX)/2;
else { WinPosX=0; WinSizeX=wr.right-wr.left; }
if (wr.bottom-wr.top > WinSizeY) WinPosY = (wr.bottom-WinSizeY)/2;
else { WinPosY=0; WinSizeY=wr.bottom-wr.top; }
if (!move)
{
GetWindowRect(hWnd,&wr);
WinPosX=wr.left;
WinPosY=wr.top;
}
MoveWindow(hWnd, WinPosX, WinPosY, WinSizeX, WinSizeY, TRUE);
}
void CheckMessage(void)
{
MSG msg;
if ( PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
if ( !TranslateAccelerator (hWnd, hAccel, &msg) )
{ TranslateMessage(&msg);
DispatchMessage(&msg); }
}
BOOL GetColor(DWORD current)
{
cc.lStructSize=sizeof(cc);
cc.hwndOwner=hWnd;
cc.rgbResult=current;
cc.lpCustColors=&CustCols;
cc.Flags=CC_FULLOPEN|CC_RGBINIT;
return ChooseColor(&cc);
}
void LoadDefaultColors()
{
clrBackGround = BROWN;
clrBlackSquare = DARKGREEN;
clrWhiteSquare = PALEGRAY;
clrBlackPiece = DARKRED;
clrWhitePiece = CWHITE;
clrText = CBLACK;
clrEdge = CBLACK;
}
void
Exit (int code)
{
SHORT bm;
for (bm=pawn;bm<=king;bm++)
{
DeleteObject(pieces[bm].mask);
DeleteObject(pieces[bm].detail);
}
DeleteObject(hBrushBackGround);
DeleteObject(hFont);
if (!code) SaveSettings();
exit (code);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -