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程序之滚动的正弦曲线(一)"是一个初学者友好的教程,旨在帮助开发者掌握C++与Windows API的结合使用,以及如何通过编程来呈现正弦函数的动态效果。 首先,我们需要了解正弦曲线的基本概念。正弦函数是三角...
Visual C++是一个集成开发环境,主要用于编写Windows应用程序。它提供了MFC(Microsoft Foundation Classes)库,这是一个C++类库,用于简化Windows API的使用。在本场景中,我们将使用MFC中的CPaintDC类来实现图形...
本文档主要涵盖了Windows程序实现的步骤、常用函数的用法以及如何绘制简单的正弦曲线。以下是对这些知识点的详细阐述: 1. **WinMain函数**: WinMain是Windows应用程序的入口点,它的原型如下: ```cpp int ...
在这个特定的项目中,“滚动的正弦图像”是一个Windows课程设计任务,其目标是实现一个在屏幕上动态显示移动的正弦曲线的程序。 在VC++中实现这样的功能,你需要了解以下关键知识点: 1. **MFC(Microsoft ...
为了实现滑动效果,可能有一个滚动条或滑块控件,用户可以通过拖动来改变正弦曲线的位置或频率。 6. **源代码组织**:项目的源代码可能会包含多个文件,比如主程序文件(主函数)、窗口类定义、事件处理函数、绘图...
在VC++环境中,使用MFC(Microsoft Foundation Classes)库来绘制正弦曲线是一项常见的图形编程任务。MFC是微软提供的一套C++类库,它为Windows应用程序开发提供了丰富的功能,包括用户界面元素、文件操作、网络通信...
正弦曲线是数学中的一个重要概念,它表示为y = sin(x),其中x是角度,y是对应的正弦值。在计算机图形学中,通过编程绘制正弦曲线可以帮助理解函数图像以及周期性现象。在VB中,我们可以使用GDI+(Graphics Device ...
通过以上步骤,你将能够创建一个MFC应用程序,其中包含一个小球沿正弦曲线滚动的动画效果。这个项目不仅展示了MFC的基础应用,还涉及到图形绘制、定时器使用和基本的数学运算。对于初学者来说,这是一个很好的练习,...
在这个场景下,我们关注的是如何使用C++编程语言,特别是在MFC(Microsoft Foundation Classes)框架下,来绘制一个正弦曲线。MFC是微软为Windows平台提供的一套C++库,它简化了开发Windows应用程序的过程。 首先,...
本示例中的"VC++和COM组件混合编程,实现正弦曲线的绘制"是一个典型的案例,它结合了Microsoft Visual C++(VC++)的强大力量和Component Object Model (COM)的跨平台兼容性,来绘制正弦波形曲线。以下是对这个主题...
3. **实现滚动效果**:有三种滚动方式:水平滚动、垂直滚动和正弦波形曲线滚动。水平滚动只需改变文本的x坐标;垂直滚动改变y坐标;正弦波形滚动则需要根据数学公式(如正弦函数)来调整文本的xy坐标,使其呈波浪状...
在C#编程语言中,画出正弦函数是一项基本的图形绘制任务,通常涉及使用图形库,如Windows Presentation Foundation (WPF) 或Windows Forms。正弦函数是一个周期性数学函数,表达式为`y = Asin(kx) + B`,其中`A`是...
首先,VC++是Microsoft提供的一个集成开发环境(IDE),支持C++语言,包含丰富的库和工具,如MFC(Microsoft Foundation Classes)库,用于构建Windows应用程序。在MFC中,我们可以利用CWnd类及其派生类来创建窗口,...
ZedGraph是一个强大的开源图形库,专为.NET Framework设计,用于在Windows Forms应用程序中创建各种图表类型,如线性图、曲线图、柱状图、饼图等。在这个例子中,我们将关注如何使用ZedGraph库来显示一个正弦函数。 ...
在IT领域,VB(Visual Basic)是一种由微软公司开发的基于事件驱动的编程语言,它在Windows操作系统上广泛用于创建用户界面和应用程序。"VB曲线示例"这个标题表明我们将探讨如何在VB环境中绘制和处理曲线,这通常...
cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 绘制立体模型 cc实例082 利用IFS算法绘制自然景物 3.2 图像预览 cc实例083 图片自动预览程序 ...
2.10 控件数组典型实例 cc实例076 向窗体中动态添加控件 cc 实例077 公交线路模拟 第3章 图形技术 3.1 绘制图形 cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 ...
cc实例078 绘制正弦曲线 cc实例079 绘制艺术图案 cc实例080 画图程序 cc实例081 绘制立体模型 cc实例082 利用IFS算法绘制自然景物 3.2 图像预览 cc实例083 图片自动预览程序 ...
通过以上步骤,你可以在C# WinForm应用程序中实现一个能够实时更新的曲线图表,包括坐标轴的绘制。这个项目可以帮助你理解图形绘制的基本原理,同时为更复杂的可视化应用打下基础。在实际应用中,你还可以考虑添加...
7. **正弦曲线**:此题目可能涉及到数学和图形绘制,要求程序能绘制出正弦函数的图像,需要理解数学函数和使用图形库。 综合以上内容,这个压缩包为初学者提供了一组全面的C#基础练习,涵盖了变量操作、控制结构、...