搜索
aardio官方社区 门户 查看主题

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

发布者: hai321 | 发布时间: 2012-10-31 15:34| 查看数: 25988| 评论数: 52|帖子模式

源码打包下载

虎鲸

虎鲸
  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 很给力!

查看全部评分

最新评论

wynn_li 发表于 2012-10-31 16:28:40

我擦...这么好玩

我擦...这么好玩

点评

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

强大,不知道什么时候俺也能有这个水平。

强大,不知道什么时候俺也能有这个水平。

点评

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

看来这篇帖子,我下定决心要学 HTMLayout 感谢分享

看来这篇帖子,我下定决心要学 HTMLayout   感谢分享
ninja911 发表于 2012-10-31 16:39:08

太强大了。 感谢分享!!!学习~

太强大了。 感谢分享!!!学习~
lzj_ykds 发表于 2012-10-31 16:39:52

感受一下

感受一下
nnlenx 发表于 2012-10-31 16:41:48

果然惊喜不断,谢谢分享

果然惊喜不断,谢谢分享
look 发表于 2012-10-31 16:43:27

感谢分享

感谢分享

点评

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

你竟然有这么神奇的思路,太厉害了。{:3_59:}

你竟然有这么神奇的思路,太厉害了。

点评

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

高手呀。。学习一下

高手呀。。学习一下
xwlzx 发表于 2012-10-31 17:43:00

谢谢分享,学习一下!

谢谢分享,学习一下!
gxrcn 发表于 2012-10-31 21:06:59

神了,可以用 HTMLayout 用桌面宠物了

神了,可以用  HTMLayout 用桌面宠物了
winbooks 发表于 2012-10-31 22:32:28

太牛叉了,这个{:3_48:}

太牛叉了,这个
nvt303 发表于 2012-10-31 23:48:30

太棒了!

太棒了!
夏天雨 发表于 2012-11-1 08:47:38

厉害,顶一顶~~

厉害,顶一顶~~
不争 发表于 2012-11-1 09:04:39

cpu占用为0~1,真棒!

cpu占用为0~1,真棒!
nvt303 发表于 2012-11-1 10:16:26

同时运行N个就出现N个虎鲸,帅呆了!

同时运行N个就出现N个虎鲸,帅呆了!

点评

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

真的很好玩 好棒呀{:3_41:}

真的很好玩 好棒呀
carl 发表于 2012-11-1 16:56:36

有意思,{:3_48:} 不过这个png图尾巴是怎么动起来的?,没看懂,谁解释下?

有意思,
不过这个png图尾巴是怎么动起来的?,没看懂,谁解释下?

点评

png是apng格式的动画图片,本就可以动的。  发表于 2012-11-1 17:08
123下一页

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

GMT+8, 2017-9-25 19:19 , Processed in 0.093750 second(s), 24 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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