`

windows程序之滚动的正弦曲线(二)

阅读更多

//通过移动坐标原点来实现正弦曲线,可以减少数组元素的移动
//但要开辟2*NUM空间的数组。
#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 [2*NUM] ;
 static HPEN hPen1,hPen2;
 static int step;
     
 switch (message)
 {
    case WM_SIZE:
       cxClient = LOWORD(lParam);
       cyClient = HIWORD(lParam);
   
   for(i = 0; i < 2 * 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:
   step= (step+STEP) % NUM;
   InvalidateRect(hwnd,NULL,true);
    UpdateWindow(hwnd);
      return 0;
  case  WM_PAINT:
     hdc = BeginPaint(hwnd,&ps);
           SetViewportOrgEx(hdc,-step*cxClient/NUM,0,NULL);
     SelectObject(hdc,hPen1);
     MoveToEx(hdc,-step*cxClient/NUM,cyClient/2,NULL);
     LineTo(hdc,cxClient+step*cxClient/NUM,cyClient/2);
     SelectObject(hdc,hPen2);
     Polyline (hdc, apt+step, 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程序之滚动的正弦曲线(一)"是一个初学者友好的教程,旨在帮助开发者掌握C++与Windows API的结合使用,以及如何通过编程来呈现正弦函数的动态效果。 首先,我们需要了解正弦曲线的基本概念。正弦函数是三角...

    Visual C++绘制正弦曲线

    在Visual C++环境中,绘制正弦曲线涉及到图形用户界面(GUI)编程和数学知识的结合。Visual C++是一个集成开发环境,主要用于编写Windows应用程序。它提供了MFC(Microsoft Foundation Classes)库,这是一个C++类库...

    Windows程序设计学习文档

    本文档主要涵盖了Windows程序实现的步骤、常用函数的用法以及如何绘制简单的正弦曲线。以下是对这些知识点的详细阐述: 1. **WinMain函数**: WinMain是Windows应用程序的入口点,它的原型如下: ```cpp int ...

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

    在这个特定的项目中,“滚动的正弦图像”是一个Windows课程设计任务,其目标是实现一个在屏幕上动态显示移动的正弦曲线的程序。 在VC++中实现这样的功能,你需要了解以下关键知识点: 1. **MFC(Microsoft ...

    sinewave源代码----正弦曲线的滑动(Windows设计)

    为了实现滑动效果,可能有一个滚动条或滑块控件,用户可以通过拖动来改变正弦曲线的位置或频率。 6. **源代码组织**:项目的源代码可能会包含多个文件,比如主程序文件(主函数)、窗口类定义、事件处理函数、绘图...

    VC++绘制正弦曲线

    为了使图像更清晰,可以考虑添加缩放和滚动功能,以及动态更新正弦曲线。这可以通过重写On_WM_SIZE和On_WM_VSCROLL/On_WM_HSCROLL消息处理函数来实现,更新绘图区域和坐标范围。 在实际项目中,你可能还需要考虑...

    VB027-正弦曲线 源代码

    这样,当用户调整滚动条时,就能实时看到正弦曲线的变化。 最后,别忘了清理资源。在绘制完成后,应释放Graphics对象和Pen,防止内存泄漏。在VB中,这是通过重写Dispose方法来实现的。 通过这个VB027-正弦曲线源...

    MFC实现球沿sin曲线上滚动,简单易懂

    通过以上步骤,你将能够创建一个MFC应用程序,其中包含一个小球沿正弦曲线滚动的动画效果。这个项目不仅展示了MFC的基础应用,还涉及到图形绘制、定时器使用和基本的数学运算。对于初学者来说,这是一个很好的练习,...

    画正弦曲线

    在编程领域,绘制图形是常见的任务之一,尤其是在科学计算、数据分析和可视化中。在这个场景下,我们关注的是如何使用...通过这样的实践,不仅可以巩固C++基础知识,还能提升对Windows程序设计和图形界面开发的技能。

    VC++和COM组件混合编程,实现正弦曲线的绘制

    在正弦曲线绘制的例子中,可能的实现步骤如下: 1. **创建COM组件**: 使用VC++,开发者可以创建一个COM组件,这个组件封装了正弦函数的计算逻辑。COM组件通常包含一个或多个接口,这些接口定义了对外暴露的方法,如...

    (Static)控件实现滚动字幕

    3. **实现滚动效果**:有三种滚动方式:水平滚动、垂直滚动和正弦波形曲线滚动。水平滚动只需改变文本的x坐标;垂直滚动改变y坐标;正弦波形滚动则需要根据数学公式(如正弦函数)来调整文本的xy坐标,使其呈波浪状...

    c#画正弦函数

    在C#编程语言中,画出正弦函数是一项基本的图形绘制任务,通常涉及使用图形库,如Windows Presentation Foundation (WPF) 或Windows Forms。正弦函数是一个周期性数学函数,表达式为`y = Asin(kx) + B`,其中`A`是...

    正弦波形的绘制

    首先,VC++是Microsoft提供的一个集成开发环境(IDE),支持C++语言,包含丰富的库和工具,如MFC(Microsoft Foundation Classes)库,用于构建Windows应用程序。在MFC中,我们可以利用CWnd类及其派生类来创建窗口,...

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

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

    VB曲线示例

    在IT领域,VB(Visual Basic)是一种由微软公司开发的基于事件驱动的编程语言,它在Windows操作系统上广泛用于创建用户界面和应用程序。"VB曲线示例"这个标题表明我们将探讨如何在VB环境中绘制和处理曲线,这通常...

    zedgraph显示正弦函数

    ZedGraph是一个强大的开源图形库,专为.NET Framework设计,用于在Windows Forms应用程序中创建各种图表类型,如线性图、曲线图、柱状图、饼图等。在这个例子中,我们将关注如何使用ZedGraph库来显示一个正弦函数。 ...

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

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

    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...

Global site tag (gtag.js) - Google Analytics