王朝网络
分享
 
 
 

在VC++中借助DHTML增加特效

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

信息产业部电子第二十二研究所青岛分所 郎锐

引言

随着网络技术的发展,网页的实现语言也由最初静止的超文本标识语言(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的支持特性,从而能很简便方式实现对网页的嵌入。

2.1 程序框架的建立

在建立程序框架时可以根据需要选取不同的形式,但必须保证在最后一步选则以CHtmlView为基类。如果没有选择,或要使已有程序具备上述功能也可以通过搜寻与替换将视类头文件和源文件中所有的CView替换成CHtmlView,以完成基类的转换。

2.2 特效网页的嵌入

通过MSDN帮助查看其成员函数可以得知Navigate2();函数可以在客户区显示指定的网页(网络上的或本地的)该函数的原形如下:

void Navigate2( LPITEMIDLIST pIDL,

DWORD dwFlags = 0,

LPCTSTR lpszTargetFrameName = NULL );

void Navigate2( LPCTSTR lpszURL,

DWORD dwFlags = 0,

LPCTSTR lpszTargetFrameName = NULL,

LPCTSTR lpszHeaders = NULL,

LPVOID lpvPostData = NULL,

DWORD dwPostDataLen = 0 );

void Navigate2( LPCTSTR lpszURL,

DWORD dwFlags,

CByteArray& baPostedData,

LPCTSTR lpszTargetFrameName = NULL,

LPCTSTR lpszHeader = NULL );

尽管原形各不相同,但最主要的参数是第一个参数,它指定了网络上网页的URL(统一资源定位符)或是本地机上的网页的存放路径,需要特别指出,这里的存放路径必须是完整的绝对路径,相对路径将会导致失败。因此为了保证程序在路径改变后能正常工作,需要在显示网页之前通过GetModuleFileName()函数动态判断程序的当前存放路径。下面将特效网页嵌入部分的主要实现代码介绍如下:

……

//获取到当前应用程序存放的全路径,如C:\Windows\nope.exe形式

char exeFullPath[MAX_PATH];

GetModuleFileName(NULL,exeFullPath,MAX_PATH);

//将路径分离出来,得到如C:\Windows\的形式

CString string;

string.Format("%s",exeFullPath);

exeFullPath[string.GetLength()-9]=’\0’;

string.Format("%s",exeFullPath);

//在路径后添加特效网页的路径,得到如C:\Windows\test.html的形式

string+="test.html";

//在客户区显示具有特效的网页

Navigate2(string,NULL,NULL);

……

经过DHTML网页嵌入后的VC++程序的运行效果如上图所示,在程序中适当的应用网页特效可以起到美化界面,加

强人机友好程度等较好的效果。

3 小结

本文通过对CHtmlView的派生继承实现了在VC++下嵌入DHTML语言,并可借助所嵌入的DHTML语言实现一些在VC++中难以做到的或是实现起来颇为复杂的特效,并以此丰富程序的人机界面。本文所述思想具有较好的通用性。程序在Windows 98下,由Microsoft Visual C++ 6.0编译通过,浏览器为IE 6.0。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有