📄 mine.c
字号:
if (GetShiftKeyStatus() & 0x00000100){
#endif
if(mwCurrentButtons & MWBUTTON_L) {
BothButtonDownProc(hWnd,adrx,adry);
break;
}
/******* only rbuttondown *******/
if (bom[adrx][adry].test)
break;
if (!bom[adrx][adry].hit )
{
bom[adrx][adry].hit = TRUE;
leftbombnum--;
}
else
{ bom[adrx][adry].hit = FALSE;
leftbombnum++;
}
SetRect (&onerect, adrx*WIDTH_BOX+offsetx,
adry*HEIGHT_BOX+HEIGHT_FACE,
(adrx+1)*WIDTH_BOX+offsetx,
(adry+1)*HEIGHT_BOX+HEIGHT_FACE);
InvalidateRect (hWnd, &onerect, FALSE);
InvalidateRect (hWnd, &bombnumber, FALSE);
break;
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
sprintf(seconds, "%03d", second);
DrawDigit(hdc, seconds, TRUE);
if (leftbombnum >= 0){
sprintf(bomn,"%02d",leftbombnum);
DrawDigit(hdc, bomn, FALSE);
}
if (flag_finished)
DrawDIB(hdc, x_face+1, 1, &image_minedone);
#if 0
DrawMyBitmap (hdc, fValidfinalface?&bmpfinalface:NULL,
#endif
else
if (flag_bombout)
DrawDIB(hdc, x_face, 0, &image_minefacelost);
else
DrawDIB(hdc, x_face, 0, &image_mineface);
for (i = 0; i < sg_boxnumx; i++)
for (j = 0; j < sg_boxnumy; j++)
{
if (!bom[i][j].test && !bom[i][j].bombout){
SetTextColor (hdc,BLACK);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
Draw3DUpFrame(hdc,
i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
(i+1)*WIDTH_BOX+offsetx,
(j+1)*HEIGHT_BOX+HEIGHT_FACE,
LTGRAY);
}
if ( bom[i][j].hit)
DrawDIB(hdc, i*WIDTH_BOX+offsetx+3, j*HEIGHT_BOX+3+HEIGHT_FACE,
&image_mineflag);
if (bom[i][j].error) {
Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX,HEIGHT_BOX);
DrawDIB(hdc, i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE,
&image_minehitfalse);
}
if (bom[i][j].bombout) {
Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX,HEIGHT_BOX);
DrawDIB(hdc, i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE,
&image_minebomb);
}
}
for ( i = 0; i < itime; i++ )
{
Cancel3DFrame(hdc,(NoAdr[i].x)*WIDTH_BOX+offsetx,
(NoAdr[i].y)*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
if(NoAdr[i].NY)
TextValue(hdc,(NoAdr[i].x)*WIDTH_BOX+offsetx,
(NoAdr[i].y)*HEIGHT_BOX+HEIGHT_FACE,
bom[NoAdr[i].x][NoAdr[i].y].value);
}
EndPaint (hWnd, &ps);
break;
case WM_CLOSE:
KillTimer(hWnd, ID_CLOCK);
DestroyWindow (hWnd);
PostQuitMessage (0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void InitMyWinCreateInfo(PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_VISIBLE;
pCreateInfo->spCaption="Microwindows Minesweeper";
pCreateInfo->hMenu = 0; /* createmenu1(); */
pCreateInfo->hCursor = 0; /* GetSystemCursor(0); */
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = TestMyWinProc;
pCreateInfo->lx = 0;
pCreateInfo->ty = 0;
pCreateInfo->rx = winwidth;
pCreateInfo->by = winheight;
pCreateInfo->iBkColor = LTGRAY;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = HWND_DESKTOP;
}
void* TestMyWindow(void* data)
{
MSG Msg;
MAINWINCREATE CreateInfo;
HWND hMainWnd;
InitMyWinCreateInfo(&CreateInfo);
hMainWnd = CreateMainWindow(&CreateInfo);
if (hMainWnd == 0)
return NULL;
ShowWindow(hMainWnd,SW_SHOWNORMAL);
while( GetMessage(&Msg, NULL, 0, 0) ) {
TranslateMessage (&Msg);
DispatchMessage(&Msg);
}
return NULL;
}
int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nShowCmd)
{
TestMyWindow (NULL);
return 0;
}
/********** create a hosted about window****/
LRESULT AbHostedWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
switch (message) {
case WM_CREATE:
break;
case WM_PAINT:
{
HDC hdc;
hdc = BeginPaint (hWnd, &ps);
SetBkColor(hdc,LTGRAY);
TextOut (hdc, 10, 25, "Minesweeper Ver 0.9 (1999/08/27)", -1);
TextOut (hdc, 10, 55,
"Author: Mis. Zheng Xiang (xiang_zi@263.net).", -1);
TextOut (hdc, 10, 75,
" Mis. Glory (glory@263.net).", -1);
EndPaint (hWnd, &ps);
}
return 0;
case WM_CLOSE:
DestroyWindow (hWnd);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void InitAbHostedCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION | WS_VISIBLE;
pCreateInfo->spCaption = "The about window" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = 0; /* GetSystemCursor(0); */
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = AbHostedWinProc;
pCreateInfo->lx = 100;
pCreateInfo->ty = 200;
pCreateInfo->rx = 540;
pCreateInfo->by = 390;
pCreateInfo->iBkColor = LTGRAY;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
/*************************** High Scores Window ******************************/
#define IDC_RESET 110
LRESULT HighScoreWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
static HWND hRESET, hOK;
switch (message) {
case WM_CREATE:
hRESET = CreateWindowEx (0L, "button",
"重置",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
100, 145, 60, 26,
hWnd, (HMENU)IDC_RESET, 0, 0L);
hOK = CreateWindowEx (0L, "button",
"确定",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
220, 145, 60, 26,
hWnd, (HMENU)IDOK, 0, 0L);
break;
case WM_COMMAND:
{
int id = LOWORD(wParam);
int i;
if (id == IDC_RESET && HIWORD(wParam) == BN_CLICKED) {
for (i = 0; i < 3; i++){
score[i].highscore = 999;
strcpy(score[i].name, "unknown");
}
#if 0
FILE* pHighscore;
if ((pHighscore = fopen("res/.highscore.bomb", "w+"))){
for (i = 0; i < 3; i++)
fprintf(pHighscore, "%d, %s\n",
score[i].highscore,score[i].name);
fclose(pHighscore);
}
#endif
InvalidateRect(hWnd, NULL, TRUE);
}
if (id == IDOK && HIWORD(wParam) == BN_CLICKED)
PostMessage(hWnd, WM_CLOSE, 0, 0);
}
break;
case WM_PAINT:
{
HDC hdc;
char buffer[50];
int i;
hdc = BeginPaint (hWnd, &ps);
SetBkColor(hdc,LTGRAY);
TextOut(hdc, 130, 15, "英雄榜", -1);
TextOut(hdc, 15, 45, "SMALL" , -1);
TextOut(hdc, 15, 75, "MIDDLE", -1 );
TextOut(hdc, 15, 105, "LARGE", -1 );
for (i = 0; i < 3; i++){
sprintf(buffer, "%3d %s",
score[i].highscore, score[i].name);
TextOut(hdc, 150, 45+i*30, buffer, -1);
}
EndPaint (hWnd, &ps);
}
return 0;
case WM_CLOSE:
DestroyWindow (hRESET);
DestroyWindow (hOK);
DestroyWindow (hWnd);
hHighscore = HWND_DESKTOP;
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void InitHighScoreCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION;
pCreateInfo->spCaption = "High Score" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = 0; /* GetSystemCursor(0); */
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = HighScoreWinProc;
pCreateInfo->lx = 100;
pCreateInfo->ty = 200;
pCreateInfo->rx = 470;
pCreateInfo->by = 410;
pCreateInfo->iBkColor = LTGRAY;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
/************************* Congratulation Window *****************************/
#define IDC_CTRL_NAME 100
LRESULT CongratulationWinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hPrompt, hName, hOK;
switch (message) {
case WM_CREATE:
#if 0
hPrompt = CreateWindow ("static",
"请输入大虾尊姓大名: ",
SS_SIMPLE | WS_VISIBLE,
IDC_STATIC,
10, 10, 185, 24, hWnd, 0);
hName = CreateWindow ("edit",
getlogin(),
WS_CHILD | WS_VISIBLE | WS_BORDER,
IDC_CTRL_NAME,
10, 40, 175, 26, hWnd, 0);
#endif
hOK = CreateWindow ("button",
"确定",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
110, 75, 75, 26,
hWnd, (HMENU)IDOK, 0, 0L);
break;
case WM_COMMAND:
{
int id = LOWORD(wParam);
if (id == IDOK && HIWORD(wParam) == BN_CLICKED) {
score[flag_size].highscore = second;
SendMessage (hName, WM_GETTEXT,
19, (LPARAM)score[flag_size].name);
#if 0
FILE* pHighscore;
int i;
if ((pHighscore = fopen("res/.highscore.bomb", "w+"))){
for (i = 0; i < 3; i++)
fprintf(pHighscore, "%d, %s\n",
score[i].highscore,score[i].name);
fclose(pHighscore);
}
#endif
PostMessage (hWnd, WM_CLOSE, 0, 0);
}
}
break;
case WM_CLOSE:
DestroyWindow (hPrompt);
DestroyWindow (hName);
DestroyWindow (hOK);
DestroyWindow (hWnd);
hCongratulate = HWND_DESKTOP;
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
void InitCongratulationCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION | WS_VISIBLE;
pCreateInfo->spCaption = "Congratulation" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = 0; /* GetSystemCursor(0); */
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = CongratulationWinProc;
pCreateInfo->lx = 50;
pCreateInfo->ty = 60;
pCreateInfo->rx = 255;
pCreateInfo->by = 200;
pCreateInfo->iBkColor = LTGRAY;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
HWND
CreateMainWindow(PMAINWINCREATE pCreateInfo)
{
HWND hwnd;
RECT rc;
WNDCLASS wc;
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)pCreateInfo->MainWindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = 0;
wc.hIcon = pCreateInfo->hIcon;
wc.hCursor = pCreateInfo->hCursor;
wc.hbrBackground = (HBRUSH)CreateSolidBrush(pCreateInfo->iBkColor);
wc.lpszMenuName = 0;
wc.lpszClassName = pCreateInfo->spCaption;
RegisterClass(&wc);
SetRect(&rc, pCreateInfo->lx, pCreateInfo->ty, pCreateInfo->rx,
pCreateInfo->by);
AdjustWindowRectEx(&rc, pCreateInfo->dwStyle, FALSE, 0L);
hwnd = CreateWindowEx(0L, pCreateInfo->spCaption,
pCreateInfo->spCaption,
pCreateInfo->dwStyle,
rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
pCreateInfo->hHosting,
(HMENU)0, (HINSTANCE)0,
(PVOID)pCreateInfo->dwAddData);
return hwnd;
}
BOOL
PtInRect2(const RECT *lprc, int x, int y)
{
POINT p;
p.x = x;
p.y = y;
return PtInRect(lprc, p);
}
void
Draw3DUpFrame(HDC hDC, int l, int t, int r, int b, int fillc)
{
RECT rc;
HBRUSH hbr;
SetRect(&rc, l, t, r, b);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_3DLIGHT),
GetSysColor(COLOR_WINDOWFRAME));
InflateRect(&rc, -1, -1);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNHIGHLIGHT),
GetSysColor(COLOR_BTNSHADOW));
InflateRect(&rc, -1, -1);
hbr = CreateSolidBrush(LTGRAY);
FillRect(hDC, &rc, hbr);
DeleteObject(hbr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -