⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01_9_13_21.asp.html

📁 有用的VC教程,包括编程思想编程技巧程序效率等方面的指导
💻 HTML
📖 第 1 页 / 共 4 页
字号:
  CRect r3(0,fh/2,fw/2-1,fh-1);</td></tr></table><table width=100% ><tr><td class=a14>
  CRect r4(fw/2,fh/2,fw-1,fh-1);</td></tr></table><table width=100% ><tr><td class=a14>
  //把总子画面表面上的4个矩形区域分别拷贝到4个子画面表面</td></tr></table><table width=100% ><tr><td class=a14>
  //即实现分离总子画面表面</td></tr></table><table width=100% ><tr><td class=a14>
  SplitSurface(flysurf1,flysurf,r1,0,0);</td></tr></table><table width=100% ><tr><td class=a14>
  SplitSurface(flysurf2,flysurf,r2,0,0);</td></tr></table><table width=100% ><tr><td class=a14>
  SplitSurface(flysurf3,flysurf,r3,0,0);</td></tr></table><table width=100% ><tr><td class=a14>
  SplitSurface(flysurf4,flysurf,r4,0,0);</td></tr></table><table width=100% ><tr><td class=a14>
  //创建一个存储表面,由指针storesurf指向它</td></tr></table><table width=100% ><tr><td class=a14>
  //用以存储子画面移动时所覆盖的背景区域</td></tr></table><table width=100% ><tr><td class=a14>
  storesurf=CreateSurface(fw/2,fh/2);</td></tr></table><table width=100% ><tr><td class=a14>
  CopySurface(storesurf,bksurf,x,y);</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
  //初始化当前子画面表面</td></tr></table><table width=100% ><tr><td class=a14>
  cursurf=flysurf1;</td></tr></table><table width=100% ><tr><td class=a14>
  return TRUE;</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  void FlyWin::DrawScene()</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   //绘制背景表面和第一帧子画面表面</td></tr></table><table width=100% ><tr><td class=a14>
   //把背景表面拷贝到后备缓冲区</td></tr></table><table width=100% ><tr><td class=a14>
   BltSurface(backsurf,bksurf,0,0,TRUE);</td></tr></table><table width=100% ><tr><td class=a14>
   //把当前的子画面表面拷到后备缓冲区</td></tr></table><table width=100% ><tr><td class=a14>
   BltSurface(backsurf,cursurf,x,y,TRUE); </td></tr></table><table width=100% ><tr><td class=a14>
   //页面翻转,使后备缓冲区的内容可见</td></tr></table><table width=100% ><tr><td class=a14>
   primsurf&rarr;Flip(0,DDFLIP_WAIT);</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
   //再次把背景表面拷贝到后备缓冲区</td></tr></table><table width=100% ><tr><td class=a14>
   BltSurface(backsurf,bksurf,0,0,TRUE);</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
  void FlyWin::RestoreSurfaces()</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
  // reclain lost surfaces with the DirectDrawSurface Restore() function</td></tr></table><table width=100% ><tr><td class=a14>
  // depending on the surface's function, it may be necessary to restore</td></tr></table><table width=100% ><tr><td class=a14>
  // surface content as well</td></tr></table><table width=100% ><tr>
      <td class=a14>    if(bksurf&rarr;IsLost()) //如果bksurf丢失</td>
    </tr></table>
  <table width=100% ><tr><td class=a14>
   {</td></tr></table><table width=100% ><tr><td class=a14>
   bksurf&rarr;Restore(); //恢复内存</td></tr></table><table width=100% ><tr><td class=a14>
   LoadSurface(bksurf,&ldquo;background.bmp&rdquo;); //恢复表面内容</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   if(flysurf&rarr;IsLost())//如果flysurf丢失</td></tr></table><table width=100% ><tr><td class=a14>
   {</td></tr></table><table width=100% ><tr><td class=a14>
   flysurf&rarr;Restore(); //恢复内存</td></tr></table><table width=100% ><tr><td class=a14>
   LoadSurface(flysurf,&ldquo;bird.bmp&rdquo;); //恢复表面内容</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
  int FlyWin::SelectDriver()</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   int numdrivers=GetNumDrivers();</td></tr></table><table width=100% ><tr><td class=a14>
   if (numdrivers==1)</td></tr></table><table width=100% ><tr><td class=a14>
   return 0;</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
   CArray drivers;</td></tr></table><table width=100% ><tr><td class=a14>
   for (int i=0;i    {</td></tr></table><table width=100% ><tr><td class=a14>
   LPSTR desc, name;</td></tr></table><table width=100% ><tr><td class=a14>
   GetDriverInfo( i, 0, &desc, &name );</td></tr></table><table width=100% ><tr><td class=a14>
   drivers.Add(desc);</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   DriverDialog dialog;</td></tr></table><table width=100% ><tr><td class=a14>
   dialog.SetContents( &drivers );</td></tr></table><table width=100% ><tr><td class=a14>
   if (dialog.DoModal()!=IDOK)</td></tr></table><table width=100% ><tr><td class=a14>
   return -1;</td></tr></table><table width=100% ><tr><td class=a14>
   return dialog.GetSelection();</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  int FlyWin::SelectInitialDisplayMode()</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   DWORD curdepth=GetDisplayDepth();</td></tr></table><table width=100% ><tr><td class=a14>
   int i, nummodes=GetNumDisplayModes();</td></tr></table><table width=100% ><tr><td class=a14>
   DWORD w,h,d;</td></tr></table><table width=100% ><tr><td class=a14>
   if (curdepth!=desireddepth)</td></tr></table><table width=100% ><tr><td class=a14>
   ddraw2&rarr;SetDisplayMode( 640, 480, curdepth, 0, 0 );</td></tr></table><table width=100% ><tr><td class=a14>
   for (i=0;i    {</td></tr></table><table width=100% ><tr><td class=a14>
   GetDisplayModeDimensions( i, w, h, d );</td></tr></table><table width=100% ><tr><td class=a14>
   if (w==desiredwidth && h==desiredheight && d==desireddepth)</td></tr></table><table width=100% ><tr><td class=a14>
   return i;</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   for (i=0;i    {</td></tr></table><table width=100% ><tr><td class=a14>
   GetDisplayModeDimensions( i, w, h, d );</td></tr></table><table width=100% ><tr><td class=a14>
   if (d==desireddepth)</td></tr></table><table width=100% ><tr><td class=a14>
   return i;</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   return 0;</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  void FlyWin::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) </td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   if (nChar==VK_ESCAPE) //按ESC退出</td></tr></table><table width=100% ><tr><td class=a14>
   PostMessage( WM_CLOSE );</td></tr></table><table width=100% ><tr><td class=a14>
   DirectDrawWin::OnKeyDown(nChar, nRepCnt, nFlags);</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
  int FlyWin::OnCreate(LPCREATESTRUCT lpCreateStruct)</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   if (DirectDrawWin::OnCreate(lpCreateStruct) == -1)</td></tr></table><table width=100% ><tr><td class=a14>
   return -1;</td></tr></table><table width=100% ><tr><td class=a14>
   // TODO: Add your specialized creation code here</td></tr></table><table width=100% ><tr><td class=a14>
   SetTimer(1,nMoveSpeed,NULL); //设置定时器</td></tr></table><table width=100% ><tr><td class=a14>
   return 0;</td></tr></table><table width=100% ><tr><td class=a14>
  }</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
  void FlyWin::OnTimer(UINT nIDEvent)</td></tr></table><table width=100% ><tr><td class=a14>
  {</td></tr></table><table width=100% ><tr><td class=a14>
   // TODO: Add your message handler code here and/or call default</td></tr></table><table width=100% ><tr><td class=a14>
   int nWhich=nCount%4+1;</td></tr></table><table width=100% ><tr><td class=a14>
   nCount++;</td></tr></table><table width=100% ><tr><td class=a14>
   //判断当前表面为4个子表面中的哪一个</td></tr></table><table width=100% ><tr><td class=a14>
   switch(nWhich)</td></tr></table><table width=100% ><tr><td class=a14>
   {</td></tr></table><table width=100% ><tr><td class=a14>
   case 1:</td></tr></table><table width=100% ><tr><td class=a14>
   cursurf=flysurf1;</td></tr></table><table width=100% ><tr><td class=a14>
   break;</td></tr></table><table width=100% ><tr><td class=a14>
   case 2:</td></tr></table><table width=100% ><tr><td class=a14>
   cursurf=flysurf2;</td></tr></table><table width=100% ><tr><td class=a14>
   break;</td></tr></table><table width=100% ><tr><td class=a14>
   case 3:</td></tr></table><table width=100% ><tr><td class=a14>
   cursurf=flysurf3;</td></tr></table><table width=100% ><tr><td class=a14>
   break;</td></tr></table><table width=100% ><tr><td class=a14>
   case 4:</td></tr></table><table width=100% ><tr><td class=a14>
   cursurf=flysurf4;</td></tr></table><table width=100% ><tr><td class=a14>
   break;</td></tr></table><table width=100% ><tr><td class=a14>
   default:</td></tr></table><table width=100% ><tr><td class=a14>
   break;</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   //处理移动的子画面</td></tr></table><table width=100% ><tr><td class=a14>
   x+=nIncX;</td></tr></table><table width=100% ><tr><td class=a14>
   y+=nIncY;</td></tr></table><table width=100% ><tr><td class=a14>
   //如子画面移动到屏幕下方或上方,应碰撞返回</td></tr></table><table width=100% ><tr><td class=a14>
   if(y>=(int)(480-fh/2)||y<=0)</td></tr></table><table width=100% ><tr><td class=a14>
   {</td></tr></table><table width=100% ><tr><td class=a14>
   nIncY=-nIncY;</td></tr></table><table width=100% ><tr><td class=a14>
   y+=nIncY;</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   //如子画面移动到屏幕右方或左方,应碰撞返回</td></tr></table><table width=100% ><tr><td class=a14>
   if(x>=(int)(640-fw/2)||x<=0)</td></tr></table><table width=100% ><tr><td class=a14>
   {</td></tr></table><table width=100% ><tr><td class=a14>
   nIncX=-nIncX;</td></tr></table><table width=100% ><tr><td class=a14>
   x+=nIncX;</td></tr></table><table width=100% ><tr><td class=a14>
   }</td></tr></table><table width=100% ><tr><td class=a14>
   //把当前表面拷贝到后备缓冲区</td></tr></table><table width=100% ><tr><td class=a14>
   BltSurface(backsurf,cursurf,x,y,TRUE);</td></tr></table><table width=100% ><tr><td class=a14>
   //执行页面翻转,使后备缓冲区的内容可见</td></tr></table><table width=100% ><tr><td class=a14>
   primsurf&rarr;Flip( 0, DDFLIP_WAIT );</td></tr></table><table width=100% ><tr><td class=a14>
  </td></tr></table><table width=100% ><tr><td class=a14>
   //把备份的背景区域拷贝到后备缓冲区,以便恢复曾被</td></tr></table><table width=100% ><tr><td class=a14>
   //覆盖的背景</td></tr></table><table width=100% ><tr><td class=a14>
   BltSurface(backsurf,storesurf,nPreX,nPreY);</td></tr></table><table width=100% ><tr><td class=a14>
   //存储下一帧的子画面移动时所覆盖的背景区域于storesurf</td></tr></table><table width=100% ><tr><td class=a14>
   CopySurface(storesurf,bksurf,x,y);</td></tr></table><table width=100% ><tr><td class=a14>
   nPrex=x;</td></tr></table><table width=100% ><tr><td class=a14>
   nPrey=y;</td></tr></table><table width=100% ><tr><td class=a14>
   DirectDrawWin::OnTimer(nIDEvent);</td></tr></table><table width=100% ><tr><td class=a14>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -