绘制正弦函数曲线
来源:互联网 发布:手风琴软件 编辑:程序博客网 时间:2024/04/29 22:53
#include<windows.h>
#include<math.h>#define NUM 1000
#define TWOPI (2*3.14159)
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
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,nCmdShow);
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;
POINT apt[NUM];
switch(message)
{
case WM_SIZE:
cxClient = LOWORD (lParam);
cyClient = HIWORD (lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);
for(i=0; i < NUM; i++)
{
apt[i].x = i * cxClient/NUM;
apt[i].y = (int)(cyClient/2 * (1-sin(TWOPI*i/NUM)));
}
Polyline(hdc,apt,NUM);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hwnd, message ,wParam ,lParam);
}
运行结果如下:
下面的代码从窗口的左上角开始,在客户区画一个网格,线与线之间相距100个像素。变量 hwnd 是一个窗口句柄,hdc 是一个设备环境句柄, x 和 y 都是整数 :
GetClientRect(hwnd,&rect);
for(x=0; x<rect.right; x+=100)
{
MoveToEx(hdc,x,0,NULL);
LineTo(hdc,x,rect.bottom);
}
for(y=0; y<rect.bottom; y+=100)
{
MoveToEx(hdc,0,y,NULL);
LineTo(hdc,rect.right,y);
}
用以上的代码替换 BeginPaint 和 EndPaint 之间的内容就可以得到以下效果 :
- 绘制正弦函数曲线
- 控制台绘制正弦/余弦曲线
- 控制台绘制正弦/余弦曲线
- 用VB绘制正弦动画曲线
- 正弦余弦曲线的绘制动画
- matplotlib绘制正弦和余弦曲线
- ActionScript 正弦函数图像绘制
- 绘制正弦曲线——在屏幕上用“*”显示0~360度的正弦函数sin(x)曲线
- Android的Canvas绘制正弦函数图像
- 利用C语言绘制正弦函数
- 绘制余弦函数曲线
- matplotlib绘制函数曲线
- 打印正弦余弦曲线
- 正余弦函数曲线绘制
- sigmoid函数matlab绘制曲线
- C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码
- 利用Android的Canvas绘制正弦函数图像
- 利用Android的Canvas绘制正弦函数图像
- 相亲之战,以少胜多乎?
- jQuery中this与$(this)的区别
- java.sql.SQLException: ORA-01017: invalid username/password; logon denied
- 2012 · 年终总结
- 执行shell命令并读取执行结果——popen()的用法
- 绘制正弦函数曲线
- 用SQL游标遍历循环数据的方法
- 后台往前台写弹窗代码不显示
- flash学习
- Tomcat6.0 配置文件的说明
- 原码、反码、补码和移码其实很简单
- 面试 需要警惕三个问题
- Ext对Function.prototype的补充内容
- php 随机生成字符串