学过Java的朋友可能都听说过Java的历史:当初Java是为机顶盒设备和手持设备设计的,可惜理念在当时太朝前,结果没有被人所接受,于是Java的创始人James Gosling想到在网络上碰碰运气,当时吸引大家眼球的就是用Java编写的一个Applet,早期Java的应用很多时用来编写Applet,后来慢慢发展到J2ME/J2SE/J2EE三个分支。
现在RIA(Rich Internet Application,富互联网应用系统)方面已经是Flash和sliverlight的天下了,所以微软推出C#的时候没有对类似Applet这样的网页小应用程序的支持,不过利用.net我们还是可以做出一些类似于Applet的网页小应用程序来。当然,就像Java编写的Applet需要客户端安装相应的JRE一样,我们用C#编写的小网页应用程序也需要客户端安装相应版本的.net framework,否则网页中小程序是没有办法正常运行的。
说明:写这个程序只为娱乐,好像没有太多实际用途,下面的效果其实用Flash或者sliverlight很将简单就实现了。
且看一个在网页上不停跳动的小球的代码:
- usingSystem;
- usingSystem.Collections.Generic;
- usingSystem.ComponentModel;
- usingSystem.Data;
- usingSystem.Drawing;
- usingSystem.Drawing.Drawing2D;
- usingSystem.Drawing.Imaging;
- usingSystem.Text;
- usingSystem.Windows.Forms;
- usingSystem.Threading;
- namespaceBallGame
- {
- ///<summary>
- ///程序说明:这是一个弹球的程序代码。程序的运行效果是
- ///一个蓝色的小球在控件显示区域运动,当小球超出屏幕显示区域
- ///后,会自动反弹。
- ///作者:周公
- ///日期:2008-08-01
- ///首发地址:http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/01/2755502.aspx
- ///</summary>
- publicclassBallControl:Control
- {
- privateRectangleballRegion=newRectangle(0,0,50,50);//在显示区域的球的尺寸
- privateThreadthread;//绘制线程
- privateImageimage;//即将要在显示区域绘制的图象
- privateintspeedX=4;//球的水平移动速度
- privateintspeedY=6;//球的垂直移动速度
- publicBallControl()
- {
- ClientSize=newSize(200,300);
- BackColor=Color.Gray;
- thread=newThread(newThreadStart(Run));
- thread.Start();
- }
- protectedoverridevoidOnPaint(PaintEventArgse)
- {
- if(image!=null)
- {
- e.Graphics.DrawImage(image,0,0);
- }
- }
- ///<summary>
- ///绘制球在显示区域移动的线程
- ///</summary>
- publicvoidRun()
- {
- while(true)
- {
- image=newBitmap(ClientSize.Width,ClientSize.Height);
- Graphicsg=Graphics.FromImage(image);
- g.FillEllipse(Brushes.Blue,ballRegion);
- g.Dispose();
- if((ballRegion.X<0)||(ballRegion.X+ballRegion.Width>=ClientSize.Width))
- {
- speedX=-speedX;
- }
- if((ballRegion.Y<0)||(ballRegion.Y+ballRegion.Height>=ClientSize.Height))
- {
- speedY=-speedY;
- }
- ballRegion.X+=speedX;
- ballRegion.Y+=speedY;
- Invalidate();//重新绘制
- Thread.Sleep(300);
- }
- }
- }
- }
- 将其编译成dll文件,用如下命令(注意用.net framework的命令行,否则需要设置环境变量):
- csc /t:library /out:BallGame.dll BallGame.cs
- 这样得到BallGame.dll 文件,再建立一个html文件,代码如下:
-
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
- <title>C#编写Applet之弹球</title>
- </head>
- <body>
- <objectid="t"classid="BallGame.dll#BallGame.BallControl"height="200"width="300"VIEWASTEXT>
- </object>
- </body>
- </html>
- 下面是程序的运行效果:
- 用C#编写网页小应用程序要注意的几点:
- 1、编写的类应该继承自Control类;
- 2、应该程序代码编译成dll类库;
- 3、在网页中通过<object></object>的形式嵌入,classId采用classid="dll的url地址#命名空间.类名"的形式。如示例中classid="BallGame.dll#BallGame.BallControl"中BallGame.dll是放在网页同一目录下,BallControl类处在BallGame命名空间下。需要注意的是,好像没有什么办法来在程序中获取网页上设置的显示尺寸,所以要保证网页中设置的宽度和空间的尺寸一直。
有兴趣的朋友可以到:http://www.netskycn.com/ballgame.html和http://www.netskycn.com/taiji.html查看我编写的两个用C#编写的网页小应用程序的运行效果。
本文介绍如何使用C#编写可以在网页中嵌入并运行的小应用程序,并提供了一个弹球游戏的示例代码。
159

被折叠的 条评论
为什么被折叠?



