搜索
查看: 4168|回复: 1

[win] 窗体、控件的拖动,以及按钮拖动同时支持单击的演示

[复制链接]

1

主题

54

帖子

413

积分

培训班

积分
413
发表于 2017-11-1 21:38:01 | 显示全部楼层 |阅读模式


一、窗体拖动演示:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=599;bottom=399)
  4. winform.add(
  5. picturebox={cls="picturebox";left=132;top=100;right=430;bottom=259;border=1;notify=1;z=1}
  6. )
  7. /*}}*/

  8. //拖动窗体
  9. winform.wndproc = function(hwnd,message,wParam,lParam){
  10.         select (message) {
  11.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  12.                         winform.hitCaption()
  13.                 }
  14.         }
  15. }

  16. //拖动picturebox时,窗体跟着动
  17. winform.picturebox.wndproc = function(hwnd,message,wParam,lParam){
  18.         select (message) {
  19.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  20.                     //winform.hitCaption()  //效果一样
  21.                         ::SendMessageInt(winform.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0); //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
  22.                         return 0;
  23.                 }
  24.         }
  25. }

  26. winform.show()
  27. win.loopMessage();
复制代码




二、按钮拖动,同时支持单击事件
方法1:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=599;bottom=399)
  4. winform.add(
  5. button={cls="button";text="button";left=171;top=157;right=392;bottom=237;z=1}
  6. )
  7. /*}}*/

  8. var oldX,oldY,newX,newY //定义鼠标按下时,和弹起时的坐标

  9. winform.button.oncommand = function(id,event){
  10.         winform.msgbox( "我被单击了!!" );
  11. }

  12. //拖动窗体
  13. winform.wndproc = function(hwnd,message,wParam,lParam){
  14.         select (message) {
  15.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  16.                         winform.hitCaption()
  17.                 }
  18.         }
  19. }

  20. //拖动按钮,当原地点击时响应按钮的oncommand命令 (借助win.getMessagePos方法)
  21. winform.button.wndproc = function(hwnd,message,wParam,lParam){
  22.         select (message) {
  23.        
  24.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  25.                     oldX,oldY = win.getMessagePos();  //获取按下时坐标
  26.                         ::SendMessageInt(owner.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0);  //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
  27.                        
  28.                         newX,newY = win.getMessagePos();  //获取弹起时坐标
  29.                         if(newX==oldX && newY==oldY){ //当鼠标原地按下并弹起时,运行按钮点击事件
  30.                                 winform.button.oncommand(); //调用按钮事件
  31.                         }
  32.                         return 0;
  33.             }
  34.         }
  35. }

  36. winform.show()
  37. win.loopMessage();
复制代码



方法2:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=599;bottom=399)
  4. winform.add(
  5. button={cls="button";text="button";left=170;top=160;right=391;bottom=240;z=1}
  6. )
  7. /*}}*/

  8. var oldX,oldY,newX,newY //定义鼠标按下时,和弹起时的坐标

  9. winform.button.oncommand = function(id,event){
  10.         winform.msgbox( "我被单击了!!" );
  11. }

  12. //拖动窗体
  13. winform.wndproc = function(hwnd,message,wParam,lParam){
  14.         select (message) {
  15.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  16.                         winform.hitCaption()
  17.                 }
  18.         }
  19. }

  20. //拖动按钮,当原地点击时响应按钮的oncommand命令 (借助mouse.hook方法)
  21. winform.button.wndproc = function(hwnd,message,wParam,lParam){
  22.         select (message) {
  23.                 case 0x201/*_WM_LBUTTONDOWN*/ {
  24.                         ::SendMessageInt(owner.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0); //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
  25.                        
  26.                         if(newX==oldX && newY==oldY){ //当鼠标原地按下并弹起时,运行按钮点击事件
  27.                                 winform.button.oncommand(); //调用按钮事件
  28.                         }
  29.                         return 0;
  30.             }
  31.         }
  32. }

  33. import mouse.hook;
  34. var hook = mouse.hook();

  35. //录制回调函数
  36. hook.proc = function(msg,x,y,mouseData,injected,flags,timeStamp,extraInfo){
  37.         if( injected ) return; //模拟鼠标不处理
  38.   
  39.     select(msg) {
  40.             case 0x201/*_WM_LBUTTONDOWN*/{
  41.                 oldX=x
  42.                 oldY=y
  43.             }
  44.             case 0x202/*_WM_LBUTTONUP*/{
  45.                 newX=x
  46.                 newY=y
  47.             }
  48.     }   
  49. }


  50. winform.show()
  51. win.loopMessage();
复制代码
--雪之梦--
回复

使用道具 举报

39

主题

174

帖子

1075

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1075
发表于 2017-11-1 21:49:07 | 显示全部楼层
多谢分享源码
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2021-1-25 02:36 , Processed in 0.046875 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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