我的课程设计(1)
来源:互联网 发布:数据机房 编辑:程序博客网 时间:2024/04/29 22:18
题目:编写一个应用程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,要求每隔1/4周期,圆的填充色与圆的边线都发生变化,颜色自己选取,同时,圆的半径在1/4周期之内由正弦幅值的0.2到0.6倍增长。
#include<windows.h>
#include <math.h>
#include"resource.h"
#define PI (2 * 3.14159)
#define NUM 360
HINSTANCE hinstance;
long WINAPI WinProc(HWND hWnd,UINT iMessage,UINT wparam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
hinstance=hInstance;
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
PAINTSTRUCT ps;
HDC hdc;
static int i,j,x=30,M;
static float K=30;
static BOOL PLAY=TRUE;
static HPEN hP,hPenOld;
static POINT apt [NUM] ;
static int STYLEE[4]={HS_CROSS,HS_DIAGCROSS,HS_VERTICAL,HS_BDIAGONAL};
static HBRUSH hBrush,hBrushOld;
char *p="提示:按上下键分别可加快减慢小球速度,按左右键分别可以让其开始停止";
switch(iMessage)
{
case WM_CREATE:
for(j= 0; j < NUM; j++)
{
apt[j].x = (int)(j * 300 / NUM);
apt[j].y = (int) (300* (1-sin(PI * j / NUM)) / 2);
}
SetTimer(hWnd,1,x,NULL);
break;
case WM_PAINT:
if(i>NUM)
i=j=0;
hdc=BeginPaint(hWnd,&ps);
SetTextColor(hdc,RGB(255,0,0));
TextOut(hdc,20,10,p,strlen(p));
SetViewportOrgEx(hdc,150,100,NULL);
hP=CreatePen(NULL,5,RGB(rand(),rand(),rand()));
hPenOld=(HPEN)SelectObject(hdc,hP);
Polyline(hdc,apt,NUM) ;
hP=CreatePen(PS_SOLID,1,RGB(rand(),rand(),rand()));
hPenOld=(HPEN)SelectObject(hdc,hP);
hBrush=CreateHatchBrush(STYLEE[i/90],RGB(80*M,2*M,M*40));
hBrushOld = (HBRUSH)SelectObject(hdc,hBrush);
if((M+1) % 2==0)
K=K-60/90.0;
else
K=K+60/90.0;
M=i/90;
i++;
Ellipse(hdc,apt[i].x-K,apt[i].y-K,apt[i].x+K,apt[i].y+K);
EndPaint(hWnd,&ps);
KillTimer(hWnd,1);
SetTimer(hWnd,1,x,NULL);
break;
case WM_TIMER:
if(PLAY)
InvalidateRect(hWnd,NULL,1);
break;
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_LEFT:
PLAY=TRUE;
break;
case VK_RIGHT:
PLAY=FALSE;
break;
case VK_UP:
x--;
if(x<=10)
x=10;
break;
case VK_DOWN:
x++;
if(x>500)
x=500;
break;
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_EXIT:
SendMessage(hWnd,WM_DESTROY,0,0);
break;
case IDM_ABOUT:
DialogBox(hinstance,LPCSTR(IDD_DIALOG1),hWnd,(DLGPROC)DlgProc);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground =(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(hInstance,(LPCSTR)IDC_CURSOR2);
WndClass.hIcon=LoadIcon(hInstance,(LPCSTR)IDI_ICON1);
WndClass.lpfnWndProc =WndProc;
WndClass.hInstance=hInstance;
WndClass.lpszClassName="play";
WndClass.lpszMenuName =(LPCSTR)IDR_MENU1;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow(
"play",
"曲线圆运动",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL
);
UINT err = GetLastError();
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
BOOL CALLBACK DlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hdlg,0);
return 1;
}
break;
case WM_CLOSE:
EndDialog(hdlg,0);
return 1;
}
return 0;
}
里面有资源的部分,需要自己添加啦!!如有 不好的地方,请各位大峡提意见吧!
- 我的课程设计(1)
- 我可恶的课程设计
- 我的C++课程设计
- 我的数据结构的课程设计
- 记事本源程序我的课程设计
- 我的C语言课程设计
- 我的数据结果课程设计题目
- 课程设计的总结1
- 我的程序员之路(4)---C语言课程设计
- 知乎爬虫---总结我的Java课程设计
- 课程设计1
- 课程设计1
- 课程设计1
- 课程设计1
- 我的第一个VC作品---用ADO操作数据库---是我的课程设计
- 课程设计之我所见
- 操作系统课程设计的代码分析1
- 我的LabPHP框架的Demo应用——课程设计题目统计系统
- SOA是未来20年里中国软件业惟一的机会么
- define 的用法
- 收藏的比较精典VBS代码发布
- 电容大全
- 刚申请的,不知写什么好
- 我的课程设计(1)
- 随机生成字符串
- 程序的内存分配 栈和堆
- 程序员必知必会之maillist篇
- 如果获取URL
- [转帖]AjaxPro 内部机制探讨
- 销售员必看的哲理故事
- 如何获取IP
- VB 从零开始编外挂(完整实践版)