📄 saolei.cpp
字号:
{
if (stop)
FcNum = Cry;
else
FcNum = SmileUp ;
}
Rect.left = (cxClient-cxFace)/2 ;
Rect.top = 15 ;
Rect.right = (cxClient+cxFace)/2 ;
Rect.bottom = 15+cyFace ;
InvalidateRect (hwnd, &Rect, TRUE);
}
return 0 ;
case WM_RBUTTONUP:
//右键抬起
if (stop)
return 0;
x = LOWORD (lParam) ;
y = HIWORD (lParam) ;
if ((x >= 10) && (x < 10+cxBrick*LeiQuWidth) && (y >= 55) && (y < 55+cyBrick*LeiQuHight))
//若在雷区内,则设旗帜
{
x = (int ((x-10) / cxBrick));
y = (int ((y-55) / cyBrick));
FlagSetter (x, y);
}
InvalidateRect (hwnd, NULL, TRUE);
return 0 ;
case WM_COMMAND:
//菜单消息
hMenu = GetMenu (hwnd) ; //拿菜单句柄
switch (LOWORD (wParam))
//判断为哪个菜单消息
{
case IDM_BEGIN:
//开局
if(TmNum != 1000) //若正在游戏中,停止计时
KillTimer (hwnd, ID_TIMER) ;
LeiQu.resize(LeiQuWidth); //重新设置雷区数组大小
for(i=0; i < LeiQuWidth; i++)
LeiQu[i].resize(LeiQuHight);
for (i = 0; i < LeiQuWidth; i++)
for (j = 0; j < LeiQuHight; j++)
LeiQu[i][j] = 0 ;
CtNum = LeiNum;
TmNum = 1000 ; //设为游戏未开始状态
stop = 0;
LeiTurn = 0 ;
FcNum = SmileUp ;
InvalidateRect (hwnd, NULL, TRUE);
break;
case IDM_CATALOG:
//目录
if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\winmine.chm",HH_DISPLAY_INDEX,NULL)==0) //系统帮助不存在,在当前目录寻找
{
GetCurrentDirectory(sizeof(buffer),buffer);
strcat(buffer,TEXT("\\help\\winmine.chm"));
if (HtmlHelp(NULL,buffer,HH_DISPLAY_INDEX,NULL)==0) //仍然无法打开,显示错误消息
MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
TEXT("错误信息"),MB_ICONERROR);
}
break;
case IDM_SearchHelp:
//查找帮助主题
if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\winmine.chm",HH_DISPLAY_TOC,NULL)==0) //系统帮助不存在,在当前目录寻找
{
GetCurrentDirectory(sizeof(buffer),buffer);
strcat(buffer,TEXT("\\help\\winmine.chm"));
if (HtmlHelp(NULL,buffer,HH_DISPLAY_TOC,NULL)==0) //仍然无法打开,显示错误消息
MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
TEXT("错误信息"),MB_ICONERROR);
}
break;
case IDM_UserHelp:
//使用帮助
if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\nthelp.chm",HH_DISPLAY_TOC,NULL)==0) //系统帮助不存在,在当前目录寻找
{
GetCurrentDirectory(sizeof(buffer),buffer);
strcat(buffer,TEXT("\\help\\nthelp.chm"));
if (HtmlHelp(NULL,buffer,HH_DISPLAY_TOC,NULL)==0) //仍然无法打开,显示错误消息
MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
TEXT("错误信息"),MB_ICONERROR);
}
break;
case IDM_ABOUT:
//关于扫雷
ShellAbout(hwnd,TEXT("扫雷 ..."),"by Qi Fang,18th of May,2008",NULL);
break;
case IDM_LOW:
//初级
LeiQuWidth = LeiQuWidthL ;
LeiQuHight = LeiQuHightL ;
LeiNum = LeiNumL ;
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
break;
case IDM_MIDDLE:
//中级
LeiQuWidth = LeiQuWidthM ;
LeiQuHight = LeiQuHightM ;
LeiNum = LeiNumM ;
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
break;
case IDM_HIGH:
//高级
LeiQuWidth = LeiQuWidthH ;
LeiQuHight = LeiQuHightH ;
LeiNum = LeiNumH ;
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
break;
case IDM_DEFINE:
//自定义
DialogBox (hInstance,MAKEINTRESOURCE(IDD_DEFINE),hwnd,DefineProc); //弹出自定义对话框
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
break;
case IDM_MARK:
//标记
mark = !mark;
break;
case IDM_COLOR:
//颜色
color = !color;
break;
case IDM_SOUND:
//声音
sound = !sound;
break;
case IDM_HEROLIST:
//英雄榜
DialogBox (hInstance,MAKEINTRESOURCE(IDD_HEROLIST),hwnd,DefineProc); //弹出英雄榜
return 0;
case IDM_EXIT:
//退出
SendMessage (hwnd, WM_CLOSE, 0, 0) ;
return 0;
}
CheckMenuItem (hMenu, iSelection, MF_CHECKED) ; //在所选项前画勾
if(mark)
CheckMenuItem (hMenu, IDM_MARK, MF_CHECKED) ;
else
CheckMenuItem (hMenu, IDM_MARK, MF_UNCHECKED) ;
if(sound)
CheckMenuItem (hMenu, IDM_SOUND, MF_CHECKED) ;
else
CheckMenuItem (hMenu, IDM_SOUND, MF_UNCHECKED) ;
if(color) //彩色,读取彩色各图
{
hBrick = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Bricks16)) ;
GetObject (hBrick, sizeof (BITMAP), &brick) ;
hCounter = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Counter12)) ;
GetObject (hCounter, sizeof (BITMAP), &counter) ;
hFace = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Faces5)) ;
GetObject (hFace, sizeof (BITMAP), &face) ;
CheckMenuItem (hMenu, IDM_COLOR, MF_CHECKED) ;
InvalidateRect (hwnd, NULL, TRUE);
}
else //黑白,读取黑白各图
{
hBrick = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BBricks16)) ;
GetObject (hBrick, sizeof (BITMAP), &brick) ;
hCounter = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BCounter12)) ;
GetObject (hCounter, sizeof (BITMAP), &counter) ;
hFace = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BFaces5)) ;
GetObject (hFace, sizeof (BITMAP), &face) ;
CheckMenuItem (hMenu, IDM_COLOR, MF_UNCHECKED) ;
InvalidateRect (hwnd, NULL, TRUE);
}
return 0;
case WM_DESTROY:
//销毁窗口
SaveFile(); //保存各变量到文件
KillTimer (hwnd, ID_TIMER) ; //销毁计时器
DeleteObject (hBrick) ; //销毁对象
DeleteObject (hCounter) ;
DeleteObject (hFace) ;
PostQuitMessage (0) ; //向操作系统发出退出请求
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam); //处理一些闲杂消息
}
BOOL CALLBACK DefineProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
//对话框回调函数,由函数DialogBox调用
{
static HINSTANCE hInstance;
int hight,width,num;
switch (uMsg)
{
case WM_CREATE:
//创建对话框
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
return 0;
case WM_INITDIALOG:
//初始化对话框
SetDlgItemInt(hwndDlg, IDC_HIGHT, LeiQuHight, true);
SetDlgItemInt(hwndDlg, IDC_WIDTH, LeiQuWidth, true);
SetDlgItemInt(hwndDlg, IDC_MINENUM, LeiNum, true);
SetDlgItemText(hwndDlg, IDC_NAME, TEXT("匿名"));
SetDlgItemInt(hwndDlg, IDC_TIME1, herotime[0], true);
SetDlgItemInt(hwndDlg, IDC_TIME2, herotime[1], true);
SetDlgItemInt(hwndDlg, IDC_TIME3, herotime[2], true);
SetDlgItemText(hwndDlg, IDC_NAME1, (LPCSTR)heroname[0].c_str());
SetDlgItemText(hwndDlg, IDC_NAME2, (LPCSTR)heroname[1].c_str());
SetDlgItemText(hwndDlg, IDC_NAME3, (LPCSTR)heroname[2].c_str());
return 0;
case WM_COMMAND:
//按键消息
switch(LOWORD(wParam))
{
case IDOK:
//自定义对话框,确定
hight = GetDlgItemInt(hwndDlg, IDC_HIGHT, false, true); //取文本框数值
width = GetDlgItemInt(hwndDlg, IDC_WIDTH, false, true);
num = GetDlgItemInt(hwndDlg, IDC_MINENUM, false, true);
if (hight < 9)
hight = 9 ;
if (width < 9)
width = 9 ;
if (num < 10)
num = 10 ;
if (hight > 24)
hight = 24 ;
if (width > 30)
width = 30 ;
if (num > (hight-1) * (width-1))
num = (hight-1) * (width-1) ;
LeiQuHight = hight ; //符合限制,赋给对应的长宽及雷数
LeiQuWidth = width ;
LeiNum = num ;
EndDialog(hwndDlg, true);
return 0;
case IDC_OK:
//英雄榜输入,确定
TCHAR lpBuffer[255] ;
GetDlgItemText(hwndDlg,IDC_NAME,lpBuffer,sizeof(lpBuffer)); //取文本框文字
switch(iSelection)
{
case IDM_LOW:
heroname[0] = lpBuffer ;
break ;
case IDM_MIDDLE:
heroname[1] = lpBuffer ;
break ;
case IDM_HIGH:
heroname[2] = lpBuffer ;
break ;
}
EndDialog(hwndDlg, true);
return 0;
case IDC_RECOUNT:
//英雄榜重新计数,英雄榜记录归为默认值
int i ;
for (i=0 ; i < 3 ;i++)
{
herotime[i] = 999 ;
heroname[i] = TEXT("匿名") ;
}
SendMessage(hwndDlg,WM_INITDIALOG,wParam,lParam); //重画英雄榜对话框
return 0;
case IDCANCEL:
//取消
EndDialog(hwndDlg, true); //关闭对话框
return 0;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -