`

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程序之滚动的正弦曲线(一)"是一个初学者友好的教程,旨在帮助开发者掌握C++与Windows API的结合使用,以及如何通过编程来呈现正弦函数的动态效果。 首先,我们需要了解正弦曲线的基本概念。正弦函数是三角...

    Visual C++绘制正弦曲线

    Visual C++是一个集成开发环境,主要用于编写Windows应用程序。它提供了MFC(Microsoft Foundation Classes)库,这是一个C++类库,用于简化Windows API的使用。在本场景中,我们将使用MFC中的CPaintDC类来实现图形...

    Windows程序设计学习文档

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

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

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

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

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

    VC++绘制正弦曲线

    在VC++环境中,使用MFC(Microsoft Foundation Classes)库来绘制正弦曲线是一项常见的图形编程任务。MFC是微软提供的一套C++类库,它为Windows应用程序开发提供了丰富的功能,包括用户界面元素、文件操作、网络通信...

    VB027-正弦曲线 源代码

    正弦曲线是数学中的一个重要概念,它表示为y = sin(x),其中x是角度,y是对应的正弦值。在计算机图形学中,通过编程绘制正弦曲线可以帮助理解函数图像以及周期性现象。在VB中,我们可以使用GDI+(Graphics Device ...

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

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

    画正弦曲线

    在这个场景下,我们关注的是如何使用C++编程语言,特别是在MFC(Microsoft Foundation Classes)框架下,来绘制一个正弦曲线。MFC是微软为Windows平台提供的一套C++库,它简化了开发Windows应用程序的过程。 首先,...

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

    本示例中的"VC++和COM组件混合编程,实现正弦曲线的绘制"是一个典型的案例,它结合了Microsoft Visual C++(VC++)的强大力量和Component Object Model (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类及其派生类来创建窗口,...

    zedgraph显示正弦函数

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

    VB曲线示例

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

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

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

    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 图片自动预览程序   ...

    C# 绘制实时曲线包括绘制坐标轴

    通过以上步骤,你可以在C# WinForm应用程序中实现一个能够实时更新的曲线图表,包括坐标轴的绘制。这个项目可以帮助你理解图形绘制的基本原理,同时为更复杂的可视化应用打下基础。在实际应用中,你还可以考虑添加...

    C#一下简单题目

    7. **正弦曲线**:此题目可能涉及到数学和图形绘制,要求程序能绘制出正弦函数的图像,需要理解数学函数和使用图形库。 综合以上内容,这个压缩包为初学者提供了一组全面的C#基础练习,涵盖了变量操作、控制结构、...

Global site tag (gtag.js) - Google Analytics