六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

Windows程序之滚动的正弦曲线(一)

[复制链接]

升级  98.33%

147

主题

147

主题

147

主题

举人

Rank: 3Rank: 3

积分
495
 楼主| 发表于 2013-2-7 03:34:52 | 显示全部楼层 |阅读模式
Windows程序之滚动的正弦曲线(一)
#include <windows.h>#include <math.h>#define ID_TIMER 1#define NUM 1000#define STEP 10#define TWOPI (2 * 3.14159)LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,   PSTR szCmdLine, int iCmdShow){ static TCHAR szAppName[] = TEXT ("SineWave") ; HWND   hwnd ; MSG    msg ; WNDCLASS  wndclass ;      wndclass.style  = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc= WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon  = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName  = NULL ; wndclass.lpszClassName = szAppName ;           if (!RegisterClass (&wndclass)){   MessageBox ( NULL, TEXT ("Program requires Windows NT!"),    szAppName, MB_ICONERROR) ;   return 0 ; }      hwnd = CreateWindow ( szAppName, TEXT ("Sine Wave Using Polyline"),     WS_OVERLAPPEDWINDOW,     CW_USEDEFAULT, CW_USEDEFAULT,     CW_USEDEFAULT, CW_USEDEFAULT,     NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ;      while (GetMessage (&msg, NULL, 0, 0)){  TranslateMessage (&msg) ;  DispatchMessage (&msg) ; }  return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ static int  cxClient, cyClient ; HDC         hdc ; int         i; PAINTSTRUCT ps ; static POINT       apt [NUM] ; static HPEN hPen1,hPen2; static int step; int copyApt[STEP];      switch (message) {    case WM_SIZE:            cxClient = LOWORD(lParam);            cyClient = HIWORD(lParam);      for(i = 0; i < NUM; i++)   {    apt[i].x = (int)(i * cxClient / NUM);    apt[i].y = (int) (cyClient * (1 - sin(TWOPI * i / NUM)) / 2);   }   return 0;    case WM_CREATE:      hPen1 = CreatePen(PS_SOLID,4,RGB(255,0,0));   hPen2 = CreatePen(PS_SOLID,2,RGB(0,255,0));   SetTimer(hwnd,ID_TIMER,100,NULL);   return 0;  case WM_TIMER:   for(i = 0; i < STEP; i++)   {    copyApt[i] = apt[i].y;   }   for(i = 0; i < NUM-STEP; i++)   {    apt[i].y = apt[i+STEP].y;   }   for(i = 0; i < STEP; i++){        apt[i + NUM - STEP].y = copyApt[i];   }   InvalidateRect(hwnd,NULL,true);   UpdateWindow(hwnd);   return 0;  case  WM_PAINT:     hdc = BeginPaint(hwnd,&ps);     SelectObject(hdc,hPen1);     MoveToEx(hdc,0,cyClient/2,NULL);     LineTo(hdc,cxClient,cyClient/2);     SelectObject(hdc,hPen2);     Polyline (hdc, apt, NUM) ;     EndPaint(hwnd,&ps);     return 0;  case WM_DESTROY:     PostQuitMessage(0);     KillTimer(hwnd,ID_TIMER);     DeleteObject(hPen1);           DeleteObject(hPen2);     return 0;    } return DefWindowProc(hwnd,message,wParam,lParam);}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表