C++小球沿正弦曲线运动

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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:

相关文档
最新文档