fuliang 发表于 2013-2-7 03:34:52

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

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 ; WNDCLASSwndclass ;      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 intcxClient, cyClient ; HDC         hdc ; int         i; PAINTSTRUCT ps ; static POINT       apt ; static HPEN hPen1,hPen2; static int step; int copyApt;      switch (message) {    case WM_SIZE:            cxClient = LOWORD(lParam);            cyClient = HIWORD(lParam);      for(i = 0; i < NUM; i++)   {    apt.x = (int)(i * cxClient / NUM);    apt.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 = apt.y;   }   for(i = 0; i < NUM-STEP; i++)   {    apt.y = apt.y;   }   for(i = 0; i < STEP; i++){      apt.y = copyApt;   }   InvalidateRect(hwnd,NULL,true);   UpdateWindow(hwnd);   return 0;caseWM_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);}
页: [1]
查看完整版本: Windows程序之滚动的正弦曲线(一)