老钟古

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
代码
#include <windows.h>
#include 
<math.h>
#include 
<Wingdi.h>

#define NUM 1000
#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(
"This 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, 00))
    {
        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_CREATE:
        PlaySound(TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC);
        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);
        
return 0;

    
case WM_DESTROY:
        PostQuitMessage(
0);
        
return 0;
    }

    
return DefWindowProc(hwnd, message, wParam, lParam);
}

 

posted on 2010-11-08 20:55  老钟古  阅读(357)  评论(0编辑  收藏  举报