首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > Windows程序之滚动的正弦曲线(一)
【标  题】:Windows程序之滚动的正弦曲线(一)
【关键字】:Windows
【来  源】:BLOG.CSDN.NET

Windows程序之滚动的正弦曲线(一)

#include <windows.h>
#include <math.h>

#define ID_TIMER 1
#define NUM 1000
#define STEP 10
#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 ("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, 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 ;
 static POINT       apt [NUM] ;
 static HPEN hPen1,hPen2;
 static int step;
 int copyApt[STEP];
    
 switch (message)
 {
    case WM_SIZE:
            cxClient = LOWORD(lParam);
            cyClient = HIWORD(lParam);
   
      for(i = 0; i < NUM; i++)
   {
    apt[i].x = (int)(i * cxClient / NUM);
    apt[i].y = (int) (cyClient * (1 - sin(TWOPI * i / NUM)) / 2);
   }
   return 0;
    case WM_CREATE:
      hPen1 = CreatePen(PS_SOLID,4,RGB(255,0,0));
   hPen2 = CreatePen(PS_SOLID,2,RGB(0,255,0));
   SetTimer(hwnd,ID_TIMER,100,NULL);
   return 0;

       case WM_TIMER:
   for(i = 0; i < STEP; i++)
   {
    copyApt[i] = apt[i].y;
   }
   for(i = 0; i < NUM-STEP; i++)
   {
    apt[i].y = apt[i+STEP].y;
   }
   for(i = 0; i < STEP; i++)
   {
                apt[i + NUM - STEP].y = copyApt[i];
   }
            InvalidateRect(hwnd,NULL,true);
   UpdateWindow(hwnd);
      return 0;
       case  WM_PAINT:
     hdc = BeginPaint(hwnd,&ps);

     SelectObject(hdc,hPen1);
     MoveToEx(hdc,0,cyClient/2,NULL);
     LineTo(hdc,cxClient,cyClient/2);

     SelectObject(hdc,hPen2);
     Polyline (hdc, apt, NUM) ;

     EndPaint(hwnd,&ps);
     return 0;

    case WM_DESTROY:
     PostQuitMessage(0);
     KillTimer(hwnd,ID_TIMER);
     DeleteObject(hPen1);
           DeleteObject(hPen2);
     return 0;  }
 return DefWindowProc(hwnd,message,wParam,lParam);
}

windows程序之滚动的正弦曲线(二):【上一篇】
VC上尝试输入输出宽字符时发现问题:【下一篇】
【相关文章】
  • windows程序之滚动的正弦曲线(二)
  • Windows图标-Icon文件格式分析。
  • 如何把Weblogic Server配置为Windows服务
  • Windows Server2003 10条小技巧
  • Windows API函数大全二
  • Windows API函数大全三
  • Windows API函数大全四
  • 打造Windows Media Player万能版
  • Windows的好帮手 新卸载软件功能强大
  • windows下禁止程序运行
  • 【随机文章】
  • 双击在Excel中的妙用
  • 正则表达式祥解
  • 3ds Max 5.0 打造吉它与萨克斯(1)
  • 在没有CD-ROM 驱动器的笔记本电脑上安装Linux
  • 当今职场上广为流传的十大精辟语录 职场生涯
  • 《人件》第IV篇 培育高生产力团队 第16章 很高兴在这里
  • Builder模式实例分析(C语言版)
  • 一个全面获取图象信息的函数getImageInfo()
  • 利用ProtoType框架完成的一个下拉框(asp:DropDownList)联动的AJAX例子.
  • 简析Linux与FreeBSD的syscall与shellcode(转安全焦点)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.