⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mine.c

📁 开放源码实时操作系统源码.
💻 C
📖 第 1 页 / 共 3 页
字号:
            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 + -