📄 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 110LRESULT 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 100LRESULT 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;}HWNDCreateMainWindow(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;}BOOLPtInRect2(const RECT *lprc, int x, int y){ POINT p; p.x = x; p.y = y; return PtInRect(lprc, p);}voidDraw3DUpFrame(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 + -