aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 86631|回复: 52

HTMLayout做了个桌面宠物---虎鲸

  [复制链接]

1

主题

19

回帖

322

积分

二级会员

积分
322
发表于 2012-10-31 15:34:10 | 显示全部楼层 |阅读模式
源码打包下载

虎鲸

虎鲸
  1. /**
  2. 桌面虎鲸
  3. Author: hai321
  4. 参考资料:
  5. [源码分享] HTMLayout 使用APNG制作桌面透明动画窗口
  6. http://bbs.aardio.com/thread-7922-1-1.html
  7. **/

  8. import win.ui;
  9. import winex;
  10. /*DSG{{*/
  11. winform = ..win.form( text="虎鲸";bottom=170;parent=...;right=297;border="none";topmost=1;exmode="toolwindow";mode="popup";cls="hujing" )
  12. winform.add(  )
  13. /*}}*/

  14. //启用分层窗口以支持桌面透明
  15. winform.transparent(true);

  16. import web.layout;
  17. wbLayout = web.layout(winform);


  18. wbLayout.html =/***
  19. <div id="myTab"><img src="/res/daddy-left.png"/></div>
  20. <menu.context id="menuId">
  21.   <li>桌面图标
  22.      <menu>
  23.                   <li id="i1">隐藏图标</li>
  24.                   <li id="i2">显示图标</li>
  25.      </menu>  
  26.   </li>
  27.   <li>选择鲸鱼
  28.      <menu>
  29.      <li id="i5">鲸鱼爸爸</li>
  30.      <li id="i6">鲸鱼妈妈</li>
  31.      <li id="i6">鲸鱼宝宝</li>
  32.      </menu>  
  33.   </li>
  34.    <li id="i7">关于虎鲸</li>
  35.    <li id="i8">退出</li>
  36. </menu>  
  37. ***/


  38. wbLayout.css = /**
  39. html {   
  40.     background-color:transparent; /*网页背景透明*/
  41.     context-menu:selector(menu#menuId);
  42. }
  43. menu{
  44.           width: max-intrinsic; /*内容的最大宽度,可以超出屏幕*/      
  45.           background: url(/res/menu-back-office.png) expand;
  46.           background-position: 0 0 0 24;
  47.           text-align:left;
  48. }
  49. **/

  50. //修改节点代码
  51. xghtml=function(){
  52.         if( thread.get("我是") = "爸爸"){
  53.               var myTab = wbLayout.getEle("myTab")//获取节点
  54.                if(myTab){
  55.                        if(向左游动 = false){
  56.                                myTab.child(1).innerHTML = '<img src="/res/daddy-right.png" />'
  57.                        }else {
  58.                                myTab.child(1).innerHTML = '<img src="/res/daddy-left.png" />'
  59.                        }        
  60.                }
  61.     }       
  62.         elseif( thread.get("我是") = "妈妈"){
  63.               var myTab = wbLayout.getEle("myTab")//获取节点
  64.                if(myTab){
  65.                        if(向左游动 = false){
  66.                                myTab.child(1).innerHTML = '<img src="/res/mummy-right.png" />'
  67.                        }else {
  68.                                myTab.child(1).innerHTML = '<img src="/res/mummy-left.png" />'
  69.                        }        
  70.                }
  71.     }
  72.         elseif( thread.get("我是") = "宝宝"){
  73.               var myTab = wbLayout.getEle("myTab")//获取节点
  74.                if(myTab){
  75.                        if(向左游动 = false){
  76.                                myTab.child(1).innerHTML = '<img src="/res/son-right.png" />'
  77.                        }else {
  78.                                myTab.child(1).innerHTML = '<img src="/res/son-left.png" />'
  79.                        }        
  80.                }
  81.     }
  82.     是否游动 = true;
  83.         winform.changeInterval(tmid,15);//修改定时器
  84. }

  85. wbLayout.documentElement.attachEventHandler(
  86.     //鼠标按下拖动触发下面的函数
  87.     onMouseMove = function (ltTarget,ltEle,x,y,ltMouseParams) {
  88.         if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
  89.                 是否游动 = false;  
  90.                 winform.changeInterval(tmid,5000)
  91.             var wx,wy = winform.getPos();
  92.             wx = wx + (x - winform.downPos.x)
  93.             wy = wy + (y - winform.downPos.y)
  94.             ltTarget.getForm().setPos( wx,wy)
  95.             return true;
  96.         }  
  97.     }     
  98.     //鼠标按下触发下面的函数
  99.     onMouseDown = function (ltTarget,ltEle,x,y,ltMouseParams) {
  100.               if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
  101.                       是否游动 = false                
  102.                     winform.changeInterval(tmid,1000000)        //定时器暂停3秒等待退出等命令
  103.                        winform.capture = true;
  104.                       winform.downPos = { x = x ;y = y}                 
  105.         }
  106.         elseif(ltMouseParams.button_state==2){
  107.                 是否游动 = false                   
  108.                     winform.changeInterval(tmid,1000000)        //定时器暂停3秒等待退出等命令
  109.                        winform.capture = true;
  110.                       winform.downPos = { x = x ;y = y}                
  111.         }                     
  112.     }
  113.     //鼠标弹起触发下面的函数
  114.     onMouseUp = function (ltTarget,ltEle,x,y,ltMouseParams) {              
  115.             if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
  116.                     winform.changeInterval(tmid,15);//修改定时器
  117.                          是否游动 = true;                          
  118.         }
  119.     }
  120. )

  121. //桌面句柄
  122. var hDskManager,hShellView = winex.findExists("",,"<Progman>|<WorkerW>","SHELLDLL_DefView")

  123. //右键菜单触发下面的函数
  124. wbLayout.onMenuItemClick = function (ltTarget,ltEle,reason,behaviorParams) {
  125.         是否游动 = false;   
  126.    if( ltTarget.innerText == "退出" ){   
  127.               if(hShellView)win.show(hShellView,true);//退出前显示桌面图标                  
  128.        winform.close();
  129.    }
  130.    elseif(ltTarget.innerText == "隐藏图标"){
  131.                    win.show(hShellView,false);//隐藏桌面图标
  132.                    winform.changeInterval(tmid,15);//修改定时器
  133.                     是否游动 = true;
  134.    }
  135.    elseif(ltTarget.innerText == "显示图标"){
  136.                   win.show(hShellView,true);//显示桌面图标
  137.                   winform.changeInterval(tmid,15);//修改定时器
  138.                    是否游动 = true;
  139.    }  
  140.    elseif( ltTarget.innerText == "鲸鱼爸爸" ){
  141.                      thread.set("我是","爸爸" )
  142.                      xghtml();//修改代码                    
  143.    }
  144.    elseif( ltTarget.innerText == "鲸鱼妈妈" ){
  145.                      thread.set("我是","妈妈" )
  146.                      xghtml();//修改代码                    
  147.    }
  148.    elseif( ltTarget.innerText == "鲸鱼宝宝" ){
  149.                      thread.set("我是","宝宝" )
  150.                      xghtml();//修改代码
  151.    }
  152.    elseif( ltTarget.innerText == "关于虎鲸" ){
  153.                 import process
  154.                 process.execute("http://baike.baidu.com/view/9005.htm")       
  155.                 winform.changeInterval(tmid,15);//修改定时器
  156.                   是否游动 = true;
  157.    }   
  158. }

  159. //默认设置
  160. 横位置,纵位置 = win.getScreen();//取系统分辨率
  161. var hwnd = winform.hwnd;
  162. win.setPos(hwnd,横位置-200,200);//起始位置
  163. winform.show();
  164. math.randomize()
  165. num = 1;
  166. r = 0;
  167. thread.set("我是","爸爸" )
  168. 向左游动 = true; //向左移动
  169. 是否游动 = true; //开始时游动

  170. //随机向上向下平行游动
  171. randmove=function(tmid,xnum){                                                                                  
  172.         if(num>200 and cy<纵位置 and cy>0 ){//在屏幕内游动200次后,随机改变方向
  173.                 r = math.random(-1,1);
  174.                 num = 1;
  175.         }
  176.         elseif(cy>纵位置+20){//游动超出屏幕下方时改为向上游动
  177.                 r=-1
  178.         }
  179.         elseif(cy<-20){//游动超出屏幕上方时改为向下游动
  180.                 r=1
  181.         }
  182.         num =num+ 1;                                          
  183.         if(r=0){//直线游动时减慢速度
  184.                 winform.changeInterval(tmid,25)                                                
  185.         }
  186.         else{//加快速度
  187.                 winform.changeInterval(tmid,15)
  188.         }                                        
  189.         win.setPos(hwnd,cx+xnum,cy+r)       
  190. }

  191. //向左移动
  192. left=function(tmid){
  193.     cx,cy = win.getPos(hwnd,true)               
  194.         if(cx>-240){//未超出屏幕左边时,随机游动
  195.                 xnum=-1
  196.                 randmove(tmid,xnum)//随机游动
  197.         }                               
  198.         else {                       
  199.                 向左游动 = false;;//调用向右移动;
  200.                 xghtml();//修改代码       
  201.         }       
  202. }

  203. //向右移动
  204. right=function(tmid){
  205.     cx,cy = win.getPos(hwnd,true)                               
  206.         if(cx<横位置){//未超出屏幕右边时,随机游动
  207.                 xnum=1
  208.                 randmove(tmid2,xnum);//随机游动
  209.         }
  210.         else {               
  211.                 向左游动 = true; ;//向左移动                                       
  212.                 xghtml();//修改代码       
  213.         }
  214. }

  215. //定时器控制游动
  216. tmid = winform.setInterval(
  217.     15/*毫秒*/,
  218.     function(hwnd,msg,id,tick){               
  219.             if(是否游动 = true){  
  220.                 if(向左游动 = true){
  221.                                 left(tmid)
  222.                 }
  223.                 else {
  224.                                 right(tmid)
  225.                 }  
  226.         }
  227.     }
  228. );

  229. win.loopMessage();
复制代码

点评

新版本中可以直接使用 winform.transparent(true); 启用分层透明窗口  发表于 2013-1-1 16:22
获取图标窗口要兼容win7必须改为 var hDskManager,hShellView = winex.findExists("",,"<Progman>|<WorkerW>","SHELLDLL_DefView")  发表于 2013-1-1 16:21

评分

参与人数 11 +1400 +352 收起 理由
jake + 1 很给力!
aoqi521 + 1 很给力!
zhoubujin + 10 很给力!
双书幻 + 50
nvt303 + 100 赞一个!
coder + 50 很给力!
carl + 500 赞一个!
quicker + 500 太强了!!!
JacenHe + 200 赞一个!
look + 100 + 200 很给力!
wynn_li + 40 很给力!

查看全部评分

12

主题

164

回帖

1058

积分

四级会员

积分
1058
QQ
发表于 2012-10-31 16:28:40 | 显示全部楼层
我擦...这么好玩

点评

这个本意是弄给我儿子玩的。有个狮子宠物玩腻了。哈哈。  发表于 2012-11-2 08:41

2

主题

16

回帖

141

积分

一级会员

积分
141
发表于 2012-10-31 16:33:08 | 显示全部楼层
强大,不知道什么时候俺也能有这个水平。

点评

其实我也是菜鸟。图片是网上找的。代码是抄论坛的。  发表于 2012-11-2 08:43

12

主题

164

回帖

1058

积分

四级会员

积分
1058
QQ
发表于 2012-10-31 16:33:20 | 显示全部楼层
看来这篇帖子,我下定决心要学 HTMLayout   感谢分享

39

主题

151

回帖

1244

积分

四级会员

积分
1244
发表于 2012-10-31 16:39:08 | 显示全部楼层
太强大了。 感谢分享!!!学习~

37

主题

147

回帖

1240

积分

四级会员

积分
1240
发表于 2012-10-31 16:39:52 | 显示全部楼层
感受一下

6

主题

60

回帖

514

积分

荣誉会员

积分
514
发表于 2012-10-31 16:41:48 | 显示全部楼层
果然惊喜不断,谢谢分享

75

主题

767

回帖

5045

积分

六级会员

The only one

积分
5045
发表于 2012-10-31 16:43:27 | 显示全部楼层
感谢分享

点评

版主,不知道游动代码这样实现对不对,指点指点  发表于 2012-11-2 08:48

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-10-31 16:48:34 | 显示全部楼层
你竟然有这么神奇的思路,太厉害了。

点评

哈哈,其实这个创意不是我想到的,这个鲸鱼动态图片,是在找apng图片时在酷鱼桌面看到,觉得不错。就想能不能通过快手来实现。  发表于 2012-11-2 08:37

3

主题

8

回帖

79

积分

一级会员

积分
79
发表于 2012-10-31 16:49:38 | 显示全部楼层
高手呀。。学习一下

17

主题

69

回帖

1014

积分

四级会员

积分
1014
发表于 2012-10-31 17:43:00 | 显示全部楼层
谢谢分享,学习一下!

2

主题

73

回帖

553

积分

三级会员

积分
553
发表于 2012-10-31 21:06:59 | 显示全部楼层
神了,可以用  HTMLayout 用桌面宠物了

0

主题

2

回帖

99

积分

一级会员

积分
99
发表于 2012-10-31 22:32:28 | 显示全部楼层
太牛叉了,这个

7

主题

293

回帖

1900

积分

新手入门

积分
1900
QQ
发表于 2012-10-31 23:48:30 | 显示全部楼层
太棒了!

3

主题

16

回帖

215

积分

二级会员

积分
215
发表于 2012-11-1 08:47:38 | 显示全部楼层
厉害,顶一顶~~

4

主题

852

回帖

4689

积分

荣誉会员

积分
4689
发表于 2012-11-1 09:04:39 | 显示全部楼层
cpu占用为0~1,真棒!

7

主题

293

回帖

1900

积分

新手入门

积分
1900
QQ
发表于 2012-11-1 10:16:26 | 显示全部楼层
同时运行N个就出现N个虎鲸,帅呆了!

点评

如果能够找到不同的鱼动态图片,那就更帅呆了。那位朋友有的分享一下  发表于 2012-11-2 08:52

0

主题

5

回帖

78

积分

荣誉会员

积分
78
发表于 2012-11-1 10:25:37 | 显示全部楼层
真的很好玩 好棒呀

20

主题

181

回帖

1293

积分

培训班

积分
1293
发表于 2012-11-1 16:56:36 | 显示全部楼层
有意思,
不过这个png图尾巴是怎么动起来的?,没看懂,谁解释下?

点评

png是apng格式的动画图片,本就可以动的。  发表于 2012-11-1 17:08
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-12-5 13:47 , Processed in 0.124796 second(s), 38 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表