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

📄 main.cpp

📁 画一个小球
💻 CPP
字号:
#include <windows.h>
#include "ball.h"

#define IDT_TIMER 1
#define TIME_INTERVAL 25
#define NUM_BALLS 5


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,
                    PSTR szCmdLine,int iCmdShow)
{
	HWND		hwnd;
	MSG			msg;
	WNDCLASS	wndclass;
	
	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;
	}
	
	hwnd = CreateWindow(szAppName,			// window class name
						szAppName,			// window caption
						WS_OVERLAPPEDWINDOW,// window style
						CW_USEDEFAULT,		// initial x position
						CW_USEDEFAULT,		// initial y position
						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){
	
	HDC			hdc;
	PAINTSTRUCT	ps;
	static int cxClient,cyClient;
	static Ball balls[NUM_BALLS];
	int i,j;
	RECT rc;
	
	switch (message){
	case WM_CREATE:
		srand(GetTickCount());
		hdc = GetDC(hwnd);
		for(i=0; i!=NUM_BALLS; ++i){
			balls[i].SetSpeed(rand()%10,rand()%10);
			balls[i].SetDirection((rand()%360)*TWO_PI/360);
			balls[i].SetColor(RGB(rand()%256,rand()%256,rand()%256));
			balls[i].SetRadius(7+rand()%13);
			balls[i].SetImage(hdc);
		}
		ReleaseDC(hwnd,hdc);
		SetTimer(hwnd,IDT_TIMER,TIME_INTERVAL,NULL);
		return 0;
	
	case WM_SIZE:
		cxClient = LOWORD(lParam);
		cyClient = HIWORD(lParam);
		for(i=0; i!=NUM_BALLS; ++i){
			balls[i].SetPosition//(cxClient/2,cyClient/2);
				(20+rand()%(cxClient-20),20+rand()%(cyClient-20));
				//cxClient/8+rand()%3*cxClient/4,
				//cyClient/8+rand()%3*cyClient/4);
		}
		return 0;

	case WM_TIMER:
		//hdc = GetDC(hwnd);
		//SetViewportExtEx(hdc,cxClient,-cyClient,NULL);
		for(i=0; i!=NUM_BALLS; ++i){
			//redirect balls
			for(j=i+1; j!=NUM_BALLS; ++j)
				balls[i].CheckCollide(balls[j]);
			balls[i].AdjustSpeed(cxClient,cyClient);

			balls[i].GetUpdateRect(&rc);
			InvalidateRect(hwnd,&rc,TRUE);
			balls[i].Move();
			balls[i].GetUpdateRect(&rc);
			InvalidateRect(hwnd,&rc,TRUE);
			
		}
		//ReleaseDC(hwnd,hdc);
		return 0;

	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		SetViewportExtEx(hdc,cxClient,-cyClient,NULL);
		for(i=0; i!=NUM_BALLS; ++i)
			balls[i].Draw(hdc);
		EndPaint(hwnd, &ps);
		return 0;/**/
	
	case WM_DESTROY:
		KillTimer(hwnd,IDT_TIMER);
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd,message,wParam,lParam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -