我的课程设计(1)

来源:互联网 发布:数据机房 编辑:程序博客网 时间:2024/04/29 22:18

题目:编写一个应用程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,要求每隔1/4周期,圆的填充色与圆的边线都发生变化,颜色自己选取,同时,圆的半径在1/4周期之内由正弦幅值的0.20.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;
}

 里面有资源的部分,需要自己添加啦!!如有 不好的地方,请各位大峡提意见吧!

原创粉丝点击