C++小球沿正弦曲线运动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形设计应用:绘制小球沿曲线运动
一、实验目的
绘制一个小球沿着一定的曲线运动的简单动画。
二、实验内容
【题目描述】
本程序利用Polyline函数作曲线的绘制,然后在每个细分点用定义好的画刷画圆。这和一般的绘图程序没有很大的区别,但要实现动画的效果,就要隔一段时间绘制客户区,也就是发送WM_PAINT消息让客户区重绘,因为圆的坐标在不停的变化给人的感觉就是一个动画。
【题目要求】
利用画笔、画刷工具绘制一个小球,并沿着正弦曲线运动,要求延迟,一边小球移动位置后重绘。
【输入/输出要求】
要求在屏幕上显示运动的结果。
三、源程序清单:
#include
#include
#define NUM 1000
#define TWOPI 6.28315
static int lRadious=30;
int beginp=0;
POINT apt[NUM];
TCHAR szWindowClass[100] = TEXT("复杂窗口") ; //静态变量定义标题
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK MndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int nCmdShow)
{
//nCmdShow=SW_RESTORE;
MSG msg ;
if (!MyRegisterClass (hInstance)) //注册窗口类,出错提示并返回
{
MessageBox (NULL, TEXT ("窗口程序注册失败!"), szWindowClass, MB_ICONERROR) ;
return 0 ;
}
InitInstance(hInstance, nCmdShow);// 执行应用程序初始化
while (GetMessage (&msg,NULL, 0, 0)) //执行消息循环,取得消息
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
MSG a;
a=msg;
}
return msg.wParam ;
}
// 函数: MyRegisterClass()
// 目的: 注册窗口类。
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); //结构的字节数
wcex.style = CS_HREDRAW | CS_VREDRAW ; //窗口类样式
wcex.lpfnWndProc = MndProc ; //窗口函数的指针
wcex.cbClsExtra = 0 ;//分配在窗口结构后的字节数
wcex.cbWndExtra = 0 ; //分配在窗口实例后的字节数
wcex.hInstance = hInstance ;//定义窗口类的应用程序实例句柄
wcex.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//窗口类的图标
wcex.hCursor = LoadCursor (NULL, IDC_ARROW) ; //窗口类的光标
wcex.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ; //窗口类的背景色刷
wcex.lpszMenuName = NULL ; //窗口菜单资源名
wcex.lpszClassName= szWindowClass ; //窗口类名
wcex.hIconSm =NULL; //小图标
return RegisterClassEx(&wcex);
}
// 函数: InitInstance(HINSTANCE, int)
// 目的: 保存实例句柄并创建主窗口
// 注释: 在此函数中,我们在全局变量中保存实例句柄并创建和显示主程序窗口。BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hwnd;//创建用于保存窗体句柄的对象,窗体句柄是系统识别不同窗体的依据
//hInst = hInstance; //将实例句柄存储在全局变量中
//创建窗口
hwnd = CreateWindow(
szWindowClass, // 窗口类名
TEXT ("Windows API 简单窗口"), // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口风格,可叠层窗口
CW_USEDEFAULT, // 初始x位置,用缺省的递增式
CW_USEDEFAULT, // 初始y位置,用缺省的递增式
CW_USEDEFAULT, // 初始x尺寸,用缺省尺寸
CW_USEDEFAULT, // 初始y尺寸,用缺省尺寸
NULL, // 父窗口句柄
NULL, // 菜单句柄
hInstance, // 程序实例句柄
NULL) ; // 程序创建参数
//显示并重绘窗口,发出第一个WM_PAINT消息
ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;
return TRUE;
}
//消息处理函数
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ; //定义DC句柄
PAINTSTRUCT ps ; //定义绘图信息结构
int amessage;
amessage=message;
switch (message) //分别各种处理消息
{
case WM_PAINT:
//MessageBox (NULL, TEXT ("窗口程序注册失败!"), szWindowClass, MB_ICONERROR);
//return 0;
hdc = BeginPaint (hwnd, &ps) ;//得到设备描述符
RECT rt;
GetClientRect (hwnd, &rt) ;//调用GDI函数绘制图形
DrawText(hdc, TEXT(" \n\n 思维论坛\n "), -1, &rt, NULL);
EndPaint (hwnd, &ps) ;//结束绘图
return 0 ;
case WM_DESTROY: