• WinAPI——谐振动的合成


      1 #include<Windows.h>
      2 #include<math.h>
      3 
      4 #define NUM 1000
      5 #define PI  3.14159
      6 
      7 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;
      8 void Draw(HWND) ;
      9 
     10 static int    cxClient, cyClient, xOffset, yOffset;
     11 POINT        apt[NUM] ;
     12 static int    A = 100 ;
     13 
     14 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
     15 {
     16     static TCHAR szAppName[] = TEXT("谐振动合成") ;
     17     HWND     hwnd ;
     18     MSG         msg ;
     19     WNDCLASS wndclass ;
     20     
     21     wndclass.cbClsExtra        = NULL ;
     22     wndclass.cbWndExtra        = NULL ;
     23     wndclass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH) ;
     24     wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW) ;
     25     wndclass.hIcon            = LoadIcon(NULL, IDI_APPLICATION) ;
     26     wndclass.hInstance        = hInstance ;
     27     wndclass.lpfnWndProc    = WndProc ;
     28     wndclass.lpszClassName    = szAppName ;
     29     wndclass.lpszMenuName    = NULL ;
     30     wndclass.style            = CS_HREDRAW | CS_VREDRAW ;
     31 
     32     if(!RegisterClass(&wndclass))
     33     {
     34         MessageBox(NULL, TEXT("This Program Requires Windows NT !"), szAppName, MB_ICONERROR) ;
     35         return 0 ;
     36     }
     37 
     38     hwnd = CreateWindow(szAppName, TEXT("谐振动合成"), WS_OVERLAPPEDWINDOW,
     39             CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, 
     40             NULL, NULL, hInstance, NULL) ;
     41     ShowWindow(hwnd, iCmdShow) ;
     42     UpdateWindow(hwnd) ;
     43 
     44     while(TRUE)
     45     {
     46         if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     47         {
     48             if(msg.message == WM_QUIT)
     49                 break ;
     50             TranslateMessage(&msg) ;
     51             DispatchMessage(&msg) ;
     52         }
     53         else 
     54         {
     55             Draw(hwnd) ;
     56         }
     57     }
     58     return msg.wParam ;
     59 }
     60 
     61 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     62 {
     63 
     64     switch(message)
     65     {
     66     case WM_SIZE :
     67         cxClient = LOWORD(lParam) ;
     68         cyClient = HIWORD(lParam) ;
     69         xOffset  = cxClient / 2 ;
     70         yOffset  = cyClient / 2 ;
     71         A = xOffset < yOffset ? xOffset : yOffset ;
     72 
     73         return 0 ;
     74 
     75     case WM_DESTROY :
     76         PostQuitMessage(0) ;
     77         return 0 ;
     78     }
     79     return DefWindowProc(hwnd, message, wParam, lParam) ;
     80 }
     81 
     82 void Draw(HWND hwnd)
     83 {
     84     HDC            hdc ;
     85     PAINTSTRUCT ps ;
     86     RECT        rect ;
     87     int            t ;
     88     static double    w1 = 4, w2 = 5 ;                // w1 : w2 = 1 : 2
     89     static double    g = PI / 2 ;                    // 初相位之差
     90 
     91     hdc = GetDC(hwnd) ;
     92 
     93     apt[0].x = xOffset ;
     94     apt[0].y = yOffset + A * sin(g) ;
     95     MoveToEx(hdc, apt[0].x, apt[0].y, NULL) ;
     96     for(t = 1; t < NUM ; t++)
     97     {
     98         apt[t].x = xOffset + A * sin(t * 2 * w1 * w2 * PI /( NUM * w1 ));
     99         apt[t].y = yOffset + A * sin(t * 2 * w1 * w2 * PI /( NUM * w2 ) + g ) ;
    100         LineTo(hdc, apt[t].x, apt[t].y) ;
    101         MoveToEx(hdc, apt[t].x, apt[t].y, NULL) ;    
    102     }
    103 //    Polyline(hdc, apt, NUM ) ;
    104 
    105     rect.bottom = cyClient ;
    106     rect.left    = 0 ;
    107     rect.right  = cxClient ;
    108     rect.top    = 0 ;
    109 
    110 //    Sleep(1000) ;
    111 //    w1 ++ ;
    112 //    w2 ++ ;
    113 //    g += PI / 4 ;
    114 //    InvalidateRect(hwnd, &rect, TRUE) ;
    115 
    116     ReleaseDC(hwnd, hdc) ;
    117 }
  • 相关阅读:
    flutter_bloc使用解析骚年,你还在手搭bloc吗!
    白嫖JetBrains正版全家桶!
    一文总结设计模式
    201671010119 201620172《Java程序设计》第五周学习心得
    201671010119 201620172《Java程序设计》第二周学习心得
    201671010119 201620172《Java程序设计》第三周学习心得
    201671010119 201620172《Java程序设计》第八周学习心得
    201671010119 201620172《Java程序设计》第四周学习心得
    201671010119 201620172《Java程序设计》第六周学习心得
    201671010119 201620172《Java程序设计》第一周学习心得
  • 原文地址:https://www.cnblogs.com/doodle777/p/3160019.html
Copyright © 2020-2023  润新知