?? gameloop.cpp
字號:
// GameLoop.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdlib.h"
#include "resource.h"
#include "time.h"
//全局變量
BOOL bRunning,bActive,bCaution;
int x,y;
RECT rect;
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
void DrawScience(HWND hWnd);
void ShowPuase(HWND hWnd,HINSTANCE hInstance);
void ShowCaution(HWND hWnd,HINSTANCE hInstance);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//初始化
bRunning=TRUE;
bActive=TRUE;
bCaution=TRUE;
x=y=0;
srand(5);
WNDCLASS wndclass;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)GetStockObject(4);
wndclass.hCursor =LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR2));
wndclass.hIcon =NULL;
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WinProc;
wndclass.lpszClassName="NewWin";
wndclass.lpszMenuName=(LPSTR)IDR_MENU1;
wndclass.style =CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wndclass);
HWND hWnd=CreateWindow(TEXT("NewWin"),TEXT("GameLoop"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,480,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
MSG msg;
while(bRunning)
{
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg,NULL,0,0))
return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(!bActive)
{
DrawScience(hWnd);
}
else
{
WaitMessage();
}
}
return 0;
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
static HINSTANCE hInstance;
switch(msg)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
SetTimer(hWnd,1,300,NULL);
break;
case WM_TIMER:
if(bCaution)
{bCaution=FALSE;
ShowCaution(hWnd,hInstance);
}
else
{bCaution=TRUE;
InvalidateRect(hWnd,NULL,true);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_MENU_ITEM:
PostQuitMessage(0);
break;
}
break;
case WM_KEYDOWN:
switch(LOWORD(wParam))
{
case VK_UP:
y-=5;
break;
case VK_LEFT:
x-=5;
break;
case VK_RIGHT:
x+=5;
break;
case VK_DOWN:
y+=5;
break;
}
InvalidateRect(hWnd,NULL,true);
break;
case WM_ACTIVATE:
if(!bActive)
{
KillTimer(hWnd,1);
bActive=TRUE;
ShowPuase(hWnd,hInstance);
::SetWindowText (hWnd,TEXT("程序已暫停!"));
}
else
{
SetTimer(hWnd,1,300,NULL);
InvalidateRect(hWnd,NULL,true);
bActive=FALSE;
::SetWindowText (hWnd,TEXT("程序運行中"));
}
break;
case WM_DESTROY:
PostQuitMessage(0);
bRunning=FALSE;
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}
void DrawScience(HWND hWnd)
{
rect.left =x;
rect.right =120+x;
rect.top =y;
rect.bottom =120+y;
HDC hdc=::GetDC (hWnd);
HBRUSH brush=CreateSolidBrush(RGB(rand()%255,rand()%255,rand()%255));
HBRUSH oldBrush=(HBRUSH)SelectObject(hdc,brush);
::Ellipse (hdc,x,y,120+x,120+y );
::DeleteObject (brush);
DeleteDC(hdc);
ReleaseDC(hWnd,hdc);
}
void ShowPuase(HWND hWnd,HINSTANCE hInstance)
{
HDC hdc=::GetDC(hWnd);
::SelectObject (hdc,GetStockObject(4));
::Rectangle (hdc,150,130,500,280);
HDC memDC;
HBITMAP hBitmap;
hBitmap=(HBITMAP)::LoadImage (hInstance,TEXT("C:\\Documents and Settings\\Administrator\\桌面\\temp\\pause.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
memDC=::CreateCompatibleDC(hdc);
SelectObject(memDC,hBitmap);
BitBlt(hdc,200,150,238,57,memDC,0,0,SRCCOPY);
ReleaseDC(hWnd,hdc);
ReleaseDC(hWnd,hdc);
}
void ShowCaution(HWND hWnd,HINSTANCE hInstance)
{
HDC hdc=::GetDC(hWnd);
HDC memDC;
HBITMAP hBitmap;
hBitmap=(HBITMAP)::LoadImage (hInstance,TEXT("C:\\Documents and Settings\\Administrator\\桌面\\temp\\caution.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
memDC=::CreateCompatibleDC(hdc);
SelectObject(memDC,hBitmap);
BitBlt(hdc,150,120,355,112,memDC,0,0,SRCCOPY);
ReleaseDC(hWnd,hdc);
ReleaseDC(hWnd,hdc);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -