windows编程:画线,简单的碰撞检测,简单的帧率锁定
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h> #define WINDOW_CLASS_NAME "WINCLASS1" #define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480 #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1:0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0:1) //全局变量
HWND main_window_handle = NULL;
HINSTANCE hInstance_App = NULL; char buffer[]; //窗口处理函数
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lPram)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rect;
char buffer[];
switch (msg)
{
case WM_CREATE:
{
return ;
}break;
case WM_PAINT:
{
hdc = GetDC(hwnd);
ReleaseDC(hwnd, hdc);
GetClientRect(hwnd, &rect);
ValidateRect(hwnd, &rect); return ;
}break;
case WM_CLOSE:
{
if (IDYES != MessageBox(hwnd, "确实要退出应用程序?", "退出", MB_YESNO | MB_ICONEXCLAMATION))
{
return ;
}
else
{
PostQuitMessage();
}
}break;
case WM_SIZE:
{ }break;
case WM_DESTROY:
{
PostQuitMessage();
return ;
}break;
default:break;
}
return DefWindowProc(hwnd, msg, wParam, lPram);
}
void GameMain()
{
return;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//定义窗口类
WNDCLASSEX winClass;
HWND hWnd;
MSG msg; HPEN pen = NULL;
int color_change_count = ; //填充窗口类的各成员
winClass.cbSize = sizeof(WNDCLASSEX);
winClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
winClass.lpfnWndProc = WindowProc; //窗口消息处理函数
winClass.cbClsExtra = ;
winClass.cbWndExtra = ;
winClass.hInstance = hInstance;
winClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winClass.lpszMenuName = NULL;
winClass.lpszClassName = WINDOW_CLASS_NAME; //窗口类名
winClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //保存实例句柄到全局变量
hInstance_App = hInstance; //注册窗口类
if (!RegisterClassEx(&winClass))
{
return ;
} //创建窗口类的一个成员
if (!(hWnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME,
"时间锁定的屏幕保护程序",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
, ,
WINDOW_WIDTH, WINDOW_HEIGHT,
NULL,
NULL,
hInstance,
NULL)))
{
return ;
} //保存窗体句柄到全局变量中
main_window_handle = hWnd; //得到设备上下文
HDC hdc = GetDC(hWnd); //设置随机数生成器的种子
srand(GetTickCount()); //线段终点坐标
int x1 = rand() % WINDOW_WIDTH;
int y1 = rand() % WINDOW_HEIGHT;
int x2 = rand() % WINDOW_WIDTH;
int y2 = rand() % WINDOW_HEIGHT; //线段终点的速度
int x1v = - + rand() % ;
int y1v = - + rand() % ;
int x2v = - + rand() % ;
int y2v = - + rand() % ; //消息循环
while (TRUE)
{
DWORD start_time = GetTickCount(); if (PeekMessage(&msg, hWnd, , , PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//100次变换一次颜色
if (++color_change_count >= )
{
color_change_count = ;
if (pen)
{
DeleteObject(pen);
}
pen = CreatePen(PS_SOLID, , RGB(rand() % , rand() % , rand() % ));
SelectObject(hdc, pen);
}
//移动线段终点
x1 += x1v;
y1 += y1v; x2 += x2v;
y2 += y2v; //碰撞检测,看是否碰到窗体的边界
if (x1< || x1>WINDOW_WIDTH)
{
x1v = -x1v;
x1 += x1v;
}
if (y1< || y1>WINDOW_HEIGHT)
{
y1v = -y1v;
y1 += y1v;
} if (x2< || x2>WINDOW_WIDTH)
{
x2v = -x2v;
x2 += x2v;
}
if (y2< || y2>WINDOW_HEIGHT)
{
y2v = -y2v;
y2 += y2v;
} MoveToEx(hdc, x1, y1,NULL);
LineTo(hdc, x2, y2); //锁定帧率为30fps,1/30秒,约等于33毫秒。
while (GetTickCount() - start_time < );
//如果用户按了ESC,发送WM_CLOSE消息。退出程序。
if (KEYDOWN(VK_ESCAPE))
SendMessage(hWnd, WM_CLOSE, , );
}
ReleaseDC(hWnd, hdc);
return msg.wParam;
}
windows编程:画线,简单的碰撞检测,简单的帧率锁定的更多相关文章
- Unity3D 画线插件 Vectrosity_Simple2DLine
Vectrosity是一个很方便的画线插件,用它我们可以画出2D,3D,贝塞尔,圆,椭圆等各种线条图案. :链接: http://pan.baidu.com/s/1pJjTFjt 密码: uesn 首 ...
- 画线代码V1.0.0
画线代码: 最终效果图: 优点: 1.效果还行,计算量也不大(就一点2维直线一般式能有多少运算量). 缺点: 1.每条线怎么也是建模,可能会有点开销. 2.编辑起来很是麻烦. 代码部分: /***** ...
- CGContextRef 画线简单用法
CGContextRef CGContextMoveToPoint(context,150,50);//圆弧的起始点 CGContextAddArcToPoint(context,100,80,130 ...
- ASP.NET Core 新建项目(Windows) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新建项目(Windows) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目(Windows) 对于任何语言和框架,都 ...
- ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...
- ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...
- ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...
- ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
- ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...
随机推荐
- Chain Of Responsibility(职责连)-对象行为型模式
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2.动机 给多个对象处理一个请求的机会,从而 ...
- 通过RGB灯输出七色
本文由博主原创,如有不对之处请指明,转载请说明出处. /********************************* 代码功能:输出模拟信号,控制RGB灯的颜色 使用函数: pinMode(引脚 ...
- 转:fatal error: SDL/SDL.h: No such file or directory
Ubuntu的新得立已经包含SDL库,所以通过几个简单的命令就可以安装,比windows还傻瓜! sudo apt-get install libsdl1.2-dev(比较大,10M左右) 附加包: ...
- Appium移动自动化测试之安装Appium
第一次学习appium,希望此安装教程可以帮助初学者,共同学习. Appium官网介绍:Appium是与本地,使用开源自动化测试框架, 混合和移动Web应用程序. 它驱动iOS和Android应用使用 ...
- PHP移动文件指针ftell()、fseek()、rewind()总结
在对文件进行读写过程中,有时需要在文件中跳转.同不同位置读取,以及将数据写入到不同的位置.例如,使用文件模拟数据库保存数据,就需要移动文件指针.指针的位置是以从文件头开始的字节数度量的,默认以不同模式 ...
- SQLserver聚集表、堆和索引
SQL Server 表使用下列两种方法之一来组织其分区中的数据页: 聚集表是有聚集索引的表.数据行基于聚集索引键按顺序存储.聚集索引按 B 树索引结构实现,B 树索引结构支持基于聚集索引键值对行进行 ...
- controller错误统一处理--------@ExceptionHandler
用@RequestBody,@ResponseBody,不费吹灰之力就解决了JSon自动绑定.接着就发现,如果遇到RuntimeException,需要给出一个默认返回JSON 三种方式: 1.当这个 ...
- artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.
- Python.Module.site
site " This module is automatically imported during initialization. The automatic import can be ...
- MVC 之 Code First
在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大 外,对于底层和数据访问,其实都差不多.记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后 ...