信息产业部电子第二十二研究所青岛分所 郎锐
引言
随着网络技术的发展,网页的实现语言也由最初静止的超文本标识语言(HTML)发展到了现在广泛使用的动态超文本标识语言(DHTML),由于在这种新标识语言中可以使用CSS(层叠式样式表单)、JavaScript和VBScript等脚本语言以及其他的一些外部COM控件因此其可编程能力得到大大的加强,尤其是Java语言的兴起更起到推波助澜的作用。由于Java是一种功能非常强大的网络语言,因此在网页设计时往往借助其来实现一些实现起来颇为复杂但却十分美观别致的网页特效。虽然在另一种功能强大且素有"Windows 外科手术刀"之称的VC++下对于某些特效也可以通过编程实现,但实现过程往往比较复杂,比如
模拟焰火或烟雾的运动过程(动画)就需要用到DirectDraw等高级编程技术,其实现难度远大于网页特效的实现过程。正因如此,本文就对如何把实现起来较简单的用DHTML开发的网页特效移植到VC++下展开讨论。
1 DHTML实现的网页特效
编写网页的HTML/DHTML语言区别于以往的编程语言的一个最大特点就是源码公开,当看到一个好的网页时可以通过"查看源文件"看到作者是如何组织、设计该网页的,而且可以从代码级上对其进行分析。当我们看到其他一些好的应用程序时只能根据自己的编程经验和程序的实现功能来对
程序的设计思路和实现方法进行猜测,而不少好的功能在无源码的情况下无法再次编程实现以为我所用,而这些在网页设计上则不存在任何
问题,可以通过参考他人写的比较好的代码来提高自己的设计水平。
前面已经提到过,DHTML语言的实现可以通过CSS、各种脚本语言、控件和JavaApplet等予以实现,其中JavaApplet可以轻易设计出一些非常令人叹服的网页特效。下图所示的网页就是一个用JavaApplet插件实现的非常逼真的模拟焰火运动过程的特效网页。可以通过查看源文件来观察其实现代码:
……
……
其中FireWork.class是整个模拟过程的核心,其部分主要源码如下:
……
public class FireWork extends java.applet.Applet
{
public void init()
{
int width,height;
symantec.itools.lang.Context.setApplet(this);
//{{INIT_CONTROLS
setLayout(null);
width = this.size().width;
height = this.size().height;
setSize(width,height);
setForeground(new Color(16711935));
setBackground(new Color(0));
firework1 = new symantec.itools.multimedia.Firework();
firework1.setBounds(0,0,width,height);
add(firework1);
//}}
}
//{{DECLARE_CONTROLS
symantec.itools.multimedia.Firework firework1;
//}}
}
……
其需要有IE 4.0、Netscape 4.03或更高版本浏览器的支持。
2 在VC++中引入特效网页
在DHTML下可以借助.class文件以插件的形式轻松实现对焰火的真实模拟,而如要通过VC++来实现类似的效果,虽然也可以通过DirectX技术中的DirectDraw技术加以实现,但仅对于该技术本身而言就足以使一个普通程序员感到吃力,更何况此时尚没有把火焰的模拟算法考虑在内!既然用DHTML实现网页特效比较容易,那么可以设想:先通过DHTML做好一含有指定特效的网页,然后想办法把该网页通过编程的手段将其嵌入到VC++设计的
程序中,即用混合编程的方法实现在VC++下的特效设计。
混合编程可以很好的把两种或更多语言的优点融合在一起,通过优势互补实现单一语言所不能实现的特殊功能。VC++凭借其强大的编程手段可以很好地同VB、Delphi甚至汇编进行混合编程,以期能达到最佳效果。对于HTML/DHTML语言,VC++ 6.0在MFC(微软基本类库)中提供有一个从CView派生出来的子类CHtmlView。在用VC++进行
程序设计时可以将视类从CHtmlView中派生,以继承其对HTML/DHTML的支持特性,从而