搜索
查看: 35203|回复: 52

[源码分享] HTMLayout做了个桌面宠物---虎鲸

    [复制链接]

1

主题

20

帖子

321

积分

二级会员

Rank: 3Rank: 3

积分
321
发表于 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.settimer(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.settimer(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.settimer(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.settimer(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.settimer(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.settimer(tmid,15);//修改定时器
  133.                     是否游动 = true;
  134.    }
  135.    elseif(ltTarget.innerText == "显示图标"){
  136.                   win.show(hShellView,true);//显示桌面图标
  137.                   winform.settimer(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.settimer(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.settimer(tmid,25)                                                
  185.         }
  186.         else{//加快速度
  187.                 winform.settimer(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.addtimer(
  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 太强了!!!
Jacen.He + 200 赞一个!
look + 100 + 200 很给力!
wynn_li + 40 很给力!

查看全部评分

回复

使用道具 举报

0

主题

5

帖子

37

积分

新手入门

Rank: 1

积分
37
发表于 2017-6-25 10:08:09 | 显示全部楼层
很好的程序,受教了
回复

使用道具 举报

2

主题

38

帖子

258

积分

二级会员

Rank: 3Rank: 3

积分
258
发表于 2016-4-27 08:51:39 | 显示全部楼层

收藏,学习创意

收藏,学习创意
回复

使用道具 举报

1

主题

12

帖子

76

积分

一级会员

Rank: 2

积分
76
发表于 2015-7-9 10:06:22 | 显示全部楼层

学习了!

学习了!
回复

使用道具 举报

0

主题

2

帖子

19

积分

新手入门

Rank: 1

积分
19
发表于 2015-5-22 14:45:22 | 显示全部楼层

长姿势了

长姿势了
回复

使用道具 举报

0

主题

3

帖子

22

积分

新手入门

Rank: 1

积分
22
发表于 2015-5-20 10:03:24 | 显示全部楼层

有意思

有意思
回复

使用道具 举报

12

主题

38

帖子

317

积分

二级会员

Rank: 3Rank: 3

积分
317
发表于 2015-3-12 14:30:00 | 显示全部楼层

很受用,感觉很逼真!aardio有很多功能都没理清楚,只有看到一个应用,才感觉真强大!

很受用,感觉很逼真!aardio有很多功能都没理清楚,只有看到一个应用,才感觉真强大!
回复

使用道具 举报

0

主题

2

帖子

21

积分

新手入门

Rank: 1

积分
21
发表于 2015-2-13 11:01:22 | 显示全部楼层

强大,看不懂

强大,看不懂
回复

使用道具 举报

0

主题

6

帖子

52

积分

一级会员

Rank: 2

积分
52
发表于 2014-9-24 23:56:58 | 显示全部楼层

很好的例子, 正好拿来试试.

很好的例子, 正好拿来试试.
回复

使用道具 举报

12

主题

309

帖子

1798

积分

荣誉会员

Rank: 8Rank: 8

积分
1798
发表于 2014-8-22 13:15:55 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=67260&ptid=8485][co

jiangxin_dal 发表于 2014-8-21 23:25
那个 你的图片是png格式的动态图吗,为什么我打开图片查看后是静态的用浏览器打开也是静态的

支持动画PNG的软件并不多,不支持的软件打开显示就是静态的。
你可以用 RealWorld Paint

评分

参与人数 1银币 +5 收起 理由
jiangxin_dal + 5 赞一个!谢谢

查看全部评分

回复

使用道具 举报

0

主题

3

帖子

17

积分

新手入门

Rank: 1

积分
17
发表于 2014-8-21 23:25:55 | 显示全部楼层

那个 你的图片是png格式的动态图吗,为什么我打开图片查看后是静态的用浏览器打开也是静态的

那个 你的图片是png格式的动态图吗,为什么我打开图片查看后是静态的用浏览器打开也是静态的
回复

使用道具 举报

1

主题

33

帖子

200

积分

二级会员

Rank: 3Rank: 3

积分
200
发表于 2014-8-16 21:31:00 | 显示全部楼层

正需要,太给力了!

正需要,太给力了!
回复

使用道具 举报

0

主题

3

帖子

16

积分

新手入门

Rank: 1

积分
16
发表于 2014-1-8 19:42:46 | 显示全部楼层

winform.transparent(true); 给力易用,顶。

winform.transparent(true);
给力易用,顶。
回复

使用道具 举报

0

主题

1

帖子

6

积分

新手入门

Rank: 1

积分
6
发表于 2013-12-24 17:53:51 | 显示全部楼层

真的不错啊这个

真的不错啊这个
回复

使用道具 举报

0

主题

7

帖子

48

积分

新手入门

Rank: 1

积分
48
发表于 2013-12-4 15:36:34 | 显示全部楼层

新手请教:我下载了您的源码,但是怎么运行呢?我双击打开点运行,只有鲸鱼出现,没有海洋的背景呀???????????????????

新手请教:我下载了您的源码,但是怎么运行呢?我双击打开点运行,只有鲸鱼出现,没有海洋的背景呀???????????????????
回复

使用道具 举报

0

主题

14

帖子

82

积分

一级会员

Rank: 2

积分
82
发表于 2013-11-2 17:27:43 | 显示全部楼层

{:3_59:}

回复

使用道具 举报

0

主题

4

帖子

144

积分

一级会员

Rank: 2

积分
144
发表于 2013-7-20 13:27:39 | 显示全部楼层

{:3_48:}这个{:3_48:}

这个
回复

使用道具 举报

1

主题

13

帖子

74

积分

一级会员

Rank: 2

积分
74
QQ
发表于 2013-7-9 14:33:08 | 显示全部楼层

厉害啊啊

厉害啊啊
回复

使用道具 举报

2

主题

8

帖子

49

积分

新手入门

Rank: 1

积分
49
发表于 2013-7-3 17:25:58 | 显示全部楼层

谢谢分享,学习一下!

谢谢分享,学习一下!
回复

使用道具 举报

0

主题

5

帖子

34

积分

新手入门

Rank: 1

积分
34
发表于 2013-6-20 07:35:09 | 显示全部楼层

谢谢分享,学习一下!

谢谢分享,学习一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2018-10-16 12:05 , Processed in 0.093750 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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