📄 01_9_13_21.asp.html
字号:
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→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→IsLost()) //如果bksurf丢失</td>
</tr></table>
<table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
bksurf→Restore(); //恢复内存</td></tr></table><table width=100% ><tr><td class=a14>
LoadSurface(bksurf,“background.bmp”); //恢复表面内容</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
if(flysurf→IsLost())//如果flysurf丢失</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
flysurf→Restore(); //恢复内存</td></tr></table><table width=100% ><tr><td class=a14>
LoadSurface(flysurf,“bird.bmp”); //恢复表面内容</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→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→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 + -