1. //SINEWAVE.C -- Sine Wave Using Polyline (c) Charles Petzold, 1998
  2. #include <Windows.h>
  3. #include <math.h>
  4.  
  5. #define NUM 1000
  6. #define TWOPI (2 * 3.14159)
  7.  
  8. LRESULT CALLBACK WndPorc(HWND, UINT, WPARAM, LPARAM);
  9.  
  10. int WINAPI WinMain( __in HINSTANCE hInstance
  11. , __in_opt HINSTANCE hPrevInstance
  12. , __in LPSTR lpCmdLine
  13. , __in int nShowCmd )
  14. {
  15. static TCHAR szAppName[] = TEXT("SineWave");
  16. HWND hwnd;
  17. MSG msg;
  18. WNDCLASS wndclass;
  19.  
  20. wndclass.style = CS_HREDRAW | CS_VREDRAW;
  21. wndclass.lpfnWndProc = WndPorc;
  22. wndclass.cbClsExtra = ;
  23. wndclass.cbWndExtra = ;
  24. wndclass.hInstance = hInstance;
  25. wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  26. wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  27. wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  28. wndclass.lpszMenuName = NULL;
  29. wndclass.lpszClassName = szAppName;
  30.  
  31. if (!RegisterClass(&wndclass))
  32. {
  33. MessageBox(NULL, TEXT("Program requires Windows NT!")
  34. , szAppName, MB_ICONERROR);
  35. return ;
  36. }
  37.  
  38. hwnd = CreateWindow(szAppName, TEXT("Sine Wave Using Polyline")
  39. , WS_OVERLAPPEDWINDOW
  40. , CW_USEDEFAULT, CW_USEDEFAULT
  41. , CW_USEDEFAULT, CW_USEDEFAULT
  42. , NULL, NULL, hInstance, NULL);
  43.  
  44. ShowWindow(hwnd, nShowCmd);
  45. UpdateWindow(hwnd);
  46.  
  47. while (GetMessage(&msg, NULL, , ))
  48. {
  49. TranslateMessage(&msg);
  50. DispatchMessage(&msg);
  51. }
  52.  
  53. return msg.wParam;
  54. }
  55.  
  56. LRESULT CALLBACK WndPorc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  57. {
  58. static int cxClient, cyClient;
  59. HDC hdc;
  60. int i;
  61. PAINTSTRUCT ps;
  62. POINT apt[NUM];
  63.  
  64. switch (message)
  65. {
  66. case WM_SIZE:
  67. cxClient = LOWORD(lParam);
  68. cyClient = HIWORD(lParam);
  69. return ;
  70.  
  71. case WM_PAINT:
  72. hdc = BeginPaint(hwnd, &ps);
  73.  
  74. MoveToEx(hdc, , cyClient / , NULL);
  75. LineTo(hdc, cxClient, cyClient / );
  76.  
  77. for (i = ; i != NUM; ++i)
  78. {
  79. apt[i].x = i * cxClient / NUM;
  80. apt[i].y = (int)(cyClient / * ( - sin(TWOPI * i / NUM)));
  81. }
  82.  
  83. Polyline(hdc, apt, NUM);
  84. EndPaint(hwnd, &ps);
  85. return ;
  86.  
  87. case WM_DESTROY:
  88. PostQuitMessage();
  89. return ;
  90. }
  91.  
  92. return DefWindowProc(hwnd, message, wParam, lParam);
  93. }

SINEWAVE.C

SINEWAVE显示结果

第五章 绘图基础(SINEWAVE)的更多相关文章

  1. 第五章 绘图基础(ALTWIND)

    线上箭头表示画线的方向.WINDING模式和ALTERNATE模式都会填充三个封闭的L型区域,号码从1到3.两个更小的内部区域,号码为4和5,在ALTERNATE模式下不被填充.但是在WINDING模 ...

  2. 第五章 绘图基础(BEZIER)

    /*----------------------------- BEZIER.C -- Bezier Splines Demo (c) Charles Petzold, 1998 ---------- ...

  3. 第五章 绘图基础(LINEDEMO)

    LINEDEMO程序绘制一个矩形.两条直线.一个椭圆和一个圆角矩形.该程序表明,定义了封闭矩形的这些函数确实对这些区域进行了填充,因为椭圆后面的线被隐藏了. /*------------------- ...

  4. 第五章 绘图基础(DEVCAPS1)

    获取设备环境的信息 //DEVCAPS1.C--Device Capabilities Display Program No.1 (c) Charles Petzold, 1998 #include ...

  5. 0004-20180422-自动化第五章-python基础学习笔记

    内容回顾:1.数据类型 2.for和while循环 continue break #如下循环将怎么打印结果? for i in range(1,10): print(i) for i in range ...

  6. 学习笔记 第十五章 JavaScript基础

    第15章   JavaScript基础 [学习重点] 了解JavaScript基础知识 熟悉常量和变量 能够使用表达式和运算符 正确使用语句 能够掌握数据类型和转换的基本方法 正确使用函数.对象.数组 ...

  7. 第5章 绘图基础_5.1-5.4 GDI绘图

    5.1 GDI的原理和结构 (1)提供一种特殊机制彻底隔离应用程序与不同输出设备(eg.显示器或打印机),以便支持 与设备无关的图形. 光栅设备(如显示器.激光打印机):图像是由点构成的矩阵 图形输出 ...

  8. 【java并发编程实战】第五章:基础构建模块

    1.同步容器类 它们是线程安全的 1.1 vector和hashtable. 和Collections.synchronizeXxx()一样.实现方式就是在每个方法里面加入synchronize代码块 ...

  9. Qt Gui 第五章绘图类

    双缓冲 void Plotter::refreshPixmap() { pixmap = QPixmap(size()); pixmap.fill(, ); QPainter painter(& ...

随机推荐

  1. 【OSX】多个JDK共存时选择要使用的JDK版本

    10.5以后的$JAVA_HOME没有被在.bash_profile中设置的话会被默认设置为 /usr/libexec/java_home. 如果一台mac里面安装了多个JDK, 可以通过/usr/l ...

  2. bash回收站

    通过替换rm命令使被删除的文件或文件夹被移动到-/.delete/日期文件夹,方便恢复 可以定期手动删除.delete文件夹或通过额外配置定期删除减少空间占用 # for rm {{ del_time ...

  3. paperpass

    推荐大家一个靠谱的论文检测平台.重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了.怕麻烦的话,还能用它自带的降重功能.哦对了,他们现在正在做毕业季活动, 赠送很多免 ...

  4. javaWeb代码工程统计

    直接放在src/test/java包内运行 /** * 代码行数统计 * @author ThinkGem * @version 2014-7-22 */ public class CodeCount ...

  5. 关于springmvc json交互产生的406错误

    产生错误的背景:springmvc使用<mvc:annotation-driven>进行配置,那么只要引入响应的json解析包就可以了.在pom中已经引入了如下: <dependen ...

  6. SpringMVC教程1

    一.SpringMVC介绍 1.MVC介绍 ==模型-视图-控制器(MVC== 是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型.视图及控制器在应用程序中的角色将业务逻辑从界面中 ...

  7. Jmeter JDBC Request 查询语句中有汉字查询结果为空的解决方法

    搜索接口我会校验返回值,查询JDBC Request 查询语句有中文字的时候查询会有问题. 解决方法很简单,在JDBC Connection Configuration的Database URL里加一 ...

  8. 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

    一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和 ...

  9. C#实现接口IHttpModule完成统一的权限验证

    测试代码如下: using System; using System.Collections.Generic; using System.Text; using System.Collections; ...

  10. Vue 系列之 基础入门

    背景叙述 渐进式 JavaScript 框架 易用:已经会了 HTML.CSS.JavaScript?即刻阅读指南开始构建应用! 灵活:不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩. 高 ...