扫雷程序的界面设计代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
(c) Charles Petzold, 1998
------------------------------------------------------------*/

#include
#include

#define WIDTH 20
#define HEIGHT 16
#define BOXSIZE_X 20
#define BOXSIZE_Y 20
#define BORDER 9
#define SHADOW3 3
#define SHADOW2 2
#define SHADOW1 1
#define RESERVED_AREA 32

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
void DrawBorder(HDC hdc, int x, int y, int Width, int Height, int BorderWidth, int WTop);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

int iWinBorderX;
int iWinBorderY;
int iCaptionY;
int iMenuY;
int cx;
int cy;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}



iWinBorderX = GetSystemMetrics(SM_CXBORDER);
iWinBorderY = GetSystemMetrics(SM_CYBORDER);
iCaptionY = GetSystemMetrics(SM_CYCAPTION);
//iMenuY = GetSystemMetrics(SM_CYMENU);
iMenuY=0;

cx = BOXSIZE_X * WIDTH + 2 * BORDER + 2 * SHADOW3 + 2 * SHADOW2 + 2 * iWinBorderX;
cy = BOXSIZE_Y * HEIGHT + 3 * BORDER + 2 * SHADOW3+ 4 * SHADOW2 + RESERVED_AREA+2 * iWinBorderY + iCaptionY + iMenuY;

hwnd = CreateWindow (szAppName, // window class name
TEXT ("游戏-扫雷"), // window caption
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
//|WS_THICKFRAME, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
cx,cy,
//CW_USEDEFAULT, // initial x size
//CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters


ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;


while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HBRUSH hBrush ;
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
int x,y,xStart,yStart,i,j;
POINT pt;
static RECT Grid;
static BOOL MouseDown=FALSE;
static int Board[HEIGHT][WIDTH];


int iWinBorderX;
int iWinBorderY;
int iCaptionY;
int iMenuY;
int cx;
int cy;

switch (message)
{
case WM_CREATE:

for(i=0;ifor(j=0;jBoard[i][j]=rand()%4;
return 0;

case WM_MOUSEMOVE:
if (MouseDown)
{
pt.x = LOWORD (lParam);
pt.y = HIWORD (lParam);
rect.left=SHADOW3+BORDER+SHADOW2;
rect.top = RESERVED_AREA+SHADOW3+SHADOW2*3+2*BORDER;
rect.right = rect.left+BOXSIZE_X * WIDTH ;
rect.bottom =rect.top+BOXSIZE_Y * HEIGHT ;
if (PtInRect(&rect,pt))
{
i=(pt.x-rect.left)/BOXSIZE_X;
j=(pt.y-rect.top)/BOXSIZE_Y;
rect.left+=i*BOXSIZE_X;
rect.top+=j*BOXSIZE_Y;
rect.right = rect.left+BOXSIZE_X;
rect.bottom =rect.top+BOXSIZE_Y;
if (Grid.left==rect.left && Grid.top==rect.top && Grid.right==rect.right && Grid.bottom==rect.bottom)
return 0;
hdc=GetDC(hwnd);
DrawBorder(hdc, Grid.left, Grid.top, BOXSIZE_X-1, BOXSIZE_Y-1, SHADOW1, TRUE);
Grid.left=rect.left; Grid.top=rect.top; Grid.right=rect.right; Grid.bottom=rect.bottom;
DrawBorder(hdc, Grid.left, Grid.top, BOXSIZE_X-1, BOXSIZE_Y-1, SHADOW1, FALSE);
ReleaseDC(hwnd,hdc);
}
}
return 0;
case WM_LBUTTONUP:
if (MouseDown)
{
hdc=GetDC(hwnd);
DrawBorder(hdc, Grid.left, Grid.top, BOXSIZE_X-1, BOXSIZE_Y-1, SHADOW1, TRUE);

Grid.left+=2;Grid.top+=2;
Grid.right= Grid.left+BOXSIZE_X-2;Grid.bottom =Grid.top+BOXSIZE_Y-2;
SetTextColor(hdc,RGB(255, 0, 0));
SetBkColor(hdc,RGB(200, 200, 200));
DrawText(hdc,"3",-1,&Grid,DT_SINGLELINE|DT_CENTER|DT_VCENTER);


ReleaseDC(hwnd,hdc);
MouseDown=FALSE;
}
return 0;

case WM_LBUTTONDOWN:
pt.x = LOWORD (lParam);
pt.y = HIWORD (lParam);
Grid.left=SHADOW3+BORDER+SHADOW2;
Grid.top = RESERVED_AREA+SHADOW3+SHADOW2*3+2*BORDER;
Grid.right = Grid.left+BOXSIZE_X * WIDTH ;
Grid.bottom =Grid.top+BOXSIZE_Y * HEIGHT ;
if (PtInRect(&Grid,pt))
{
MouseDown=TRUE;
i=(pt.x-Grid.left)/BOXSIZE_X;
j=(pt.y-Grid.top)/BOXSIZE_Y;
Grid.left+=i*BOXSIZE_X;
Grid.top+=j*BOXSIZE_Y;
Grid.right = Grid.left+BOXSIZE_X;
Grid.bottom =Grid.top+BOXSIZE_Y;

hdc=GetDC(hwnd);
DrawBorder(hdc, Grid.left, Gr

id.top, BOXSIZE_X-1, BOXSIZE_Y-1, SHADOW1, FALSE);
ReleaseDC(hwnd,hdc);
}
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;
hBrush = CreateSolidBrush (RGB(200,200,200)) ;
SelectObject(hdc,GetStockObject(NULL_PEN));
SelectObject(hdc,hBrush);

Rectangle(hdc,0, 0, rect.right, rect.bottom);
DeleteObject(SelectObject(hdc,GetStockObject(WHITE_BRUSH)));


DrawBorder(hdc, 0, 0, rect.right, rect.bottom, SHADOW3, TRUE);
DrawBorder(hdc, SHADOW3+BORDER, SHADOW3+BORDER, BOXSIZE_X * WIDTH + 2 * SHADOW2, RESERVED_AREA+ 2 * SHADOW2, SHADOW2, FALSE);

DrawBorder(hdc, SHADOW3+BORDER, RESERVED_AREA+SHADOW3+SHADOW2*2+2*BORDER, BOXSIZE_X * WIDTH + 2 * SHADOW2, BOXSIZE_Y * HEIGHT+ 2 * SHADOW2, SHADOW2, FALSE);
xStart=SHADOW3+BORDER+SHADOW2;
yStart= RESERVED_AREA+SHADOW3+SHADOW2*3+2*BORDER;
for (i=0; ifor (j=0; j{
x=xStart+i*BOXSIZE_X;
y=yStart+j*BOXSIZE_Y;
DrawBorder(hdc, x, y, BOXSIZE_X-1, BOXSIZE_Y-1, SHADOW1, TRUE);

}

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

void DrawBorder(HDC hdc, int x, int y, int Width, int Height, int BorderWidth, int WTop)
{
int i;
HPEN hpen;
hpen=CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
if (WTop)
SelectObject(hdc,GetStockObject(WHITE_PEN));
else
SelectObject(hdc,hpen);
for (i=0; i{
MoveToEx(hdc,x+i, y+i,NULL);
LineTo(hdc,x+Width-i, y+i);
MoveToEx(hdc,x+i, y+i,NULL);
LineTo(hdc,x+i, y+Height-i);
}

if (WTop)
SelectObject(hdc,hpen);
else
SelectObject(hdc,GetStockObject(WHITE_PEN));
for (i=0; i{
MoveToEx(hdc,x+Width-i, y+Height-i,NULL);
LineTo(hdc,x+Width-i, y+i);
MoveToEx(hdc,x+Width-i, y+Height-i,NULL);
LineTo(hdc,x+i, y+Height-i);
}
DeleteObject(hpen);
}

相关文档
最新文档