网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  windows程序之滚动的正弦曲线(二)            【字体:
windows程序之滚动的正弦曲线(二)
作者:佚名    文章来源:不详    点击数:    更新时间:2007-7-1    

//通过移动坐标原点来实现正弦曲线,可以减少数组元素的移动
//但要开辟2*NUM空间的数组。
正在装载数据……

#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 [2*NUM] ;
 static HPEN hPen1,hPen2;
 static int step;
    
 switch (message)
 {
    case WM_SIZE:
            cxClient = LOWORD(lParam);
            cyClient = HIWORD(lParam);
   
      for(i = 0; i < 2 * 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:
      step= (step+STEP) % NUM;
            InvalidateRect(hwnd,NULL,true);
   UpdateWindow(hwnd);
      return 0;
       case  WM_PAINT:
     hdc = BeginPaint(hwnd,&ps);
           SetViewportOrgEx(hdc,-step*cxClient/NUM,0,NULL);
     SelectObject(hdc,hPen1);
     MoveToEx(hdc,-step*cxClient/NUM,cyClient/2,NULL);
     LineTo(hdc,cxClient+step*cxClient/NUM,cyClient/2);
     SelectObject(hdc,hPen2);
     Polyline (hdc, apt+step, 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);
}

站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • Java Swing实现俄罗斯方块

  • Struts2学习:在struts2中集…

  • weblogic 9.1的domain配置my…

  • java中final用法

  • 浅析Spring框架下PropertyPl…

  • SPRING+STRUTS+HIBERNATE登录…

  • 摘:主题:   using springmo…

  • jsp重定向forward和sendRedi…

  • struts异常_does not start …

  • 在spring MVC中配置多个视图

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David