`

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 ;
 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);
}


分享到:
评论

相关推荐

    Windows程序之滚动的正弦曲线(一).rar_rolling sine_曲线滚动c++_正弦_正弦曲线

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

    Windows程序设计学习文档

    (1)Windows 函数查找; (2)Windows程序实现的步骤,相应函数的用法; (3)绘制简单的正弦曲线;

    VC++程序 滚动的正弦图像

    屏幕显示移动的正弦曲线图像,为Windows课程设计之用。

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    2.10 控件数组典型实例 cc实例076 向窗体中动态添加控件 cc 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 ...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例078 绘制正弦曲线   cc实例079 绘制艺术图案   cc实例080 画图程序   cc实例081 绘制立体模型   cc实例082 利用IFS算法绘制自然景物   3.2 图像预览   cc实例083 图片自动预览程序   ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例078 绘制正弦曲线   cc实例079 绘制艺术图案   cc实例080 画图程序   cc实例081 绘制立体模型   cc实例082 利用IFS算法绘制自然景物   3.2 图像预览   cc实例083 图片自动预览程序   ...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例078 绘制正弦曲线 实例079 绘制艺术图案 实例080 画图程序 实例081 绘制立体模型 实例082 利用IFS算法绘制自然景物 3.2 图像预览 实例083 图片自动预览程序 实例084 图片批量浏览 实例085 浏览大幅BMP...

    C# for CSDN 乱七八糟的看不懂

    没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两...

    C#全能速查宝典

    分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...

Global site tag (gtag.js) - Google Analytics