• 第五章 绘图基础(SINEWAVE)


     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 = 0;
    23     wndclass.cbWndExtra = 0;
    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 0;
    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, 0, 0))
    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 0;
    70 
    71     case WM_PAINT:
    72         hdc = BeginPaint(hwnd, &ps);
    73         
    74         MoveToEx(hdc, 0, cyClient / 2, NULL);
    75         LineTo(hdc, cxClient, cyClient / 2);
    76         
    77         for (i = 0; i != NUM; ++i)
    78         {
    79             apt[i].x = i * cxClient / NUM;
    80             apt[i].y = (int)(cyClient / 2 * (1 - sin(TWOPI * i / NUM)));
    81         }
    82 
    83         Polyline(hdc, apt, NUM);
    84         EndPaint(hwnd, &ps);
    85         return 0;
    86 
    87     case WM_DESTROY:
    88         PostQuitMessage(0);
    89         return 0;
    90     }
    91 
    92     return DefWindowProc(hwnd, message, wParam, lParam);
    93 }
    SINEWAVE.C

    SINEWAVE显示结果

  • 相关阅读:
    随感
    to Live On
    记Weblogic部署BUG(websocket)
    CentOS更换yum源配置
    Java-14常用类-03=String类详解
    大牛博客推荐
    java-14常用类-02=Java中的String类
    npm-02 修改NPM下载地址(转换地址与下载源)
    selenium-10 selenium原理+ide录制+文件上传+弹框处理
    测试基础介绍
  • 原文地址:https://www.cnblogs.com/web1013/p/8944538.html
Copyright © 2020-2023  润新知