界面上画虚线框,判断与之相交的控件,并改变名称

By admin at 2019-07-17 • 0人收藏 • 184人看过

这个代码是很早时候写在stm32cube这个网站里的, 最近缅怀下之前写的东西, 觉得这个还是蛮有意义的, 转到这里,希望对界面设计能有点启发作用

.

import win.ui;
import mouse;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=759;bottom=469)
mainForm.add(
button={cls="button";text="button";left=142;top=78;right=275;bottom=123;z=1};
button2={cls="button";text="button2";left=158;top=200;right=301;bottom=251;z=2};
button3={cls="button";text="button3";left=396;top=119;right=542;bottom=177;z=3};
button4={cls="button";text="button4";left=391;top=234;right=537;bottom=292;z=4};
button5={cls="button";text="button5";left=245;top=330;right=391;bottom=388;z=5}
)
/*}}*/

//定义变量x,y,m,n用于记录框选区域坐标,j,k用于临时记录鼠标坐标用于比较,w,h用于记录区域宽和高,flag是鼠标左键按下标志
var x,y,m,n,j,k,w,h;
var flag=false;
 
mainForm.wndproc = function(hwnd,message,wParam,lParam){
    select( message ) { 
        case 0x201/*_WM_LBUTTONDOWN*/{
            flag=true;
            //获取鼠标左键按下的窗口坐标
            var xx,yy = mouse.getPos();
            x,y = win.toClient(hwnd,xx,yy) 
            m,n = x,y;
        }
        case 0x202/*_WM_LBUTTONUP*/{
            flag=false;
              //这个函数如果数值不变再次被调用,那么会删除刚才的虚线框
              //实现抬起鼠标删除虚线框功能
            ::DrawFocusRect(::GetDC(hwnd),::RECT(x,y,m,n));
            mainForm.redraw();//强制刷新整个客户区
            //遍历所有控件
           for(name,ctrl in mainForm.eachControl("button") ){
               //如果控件的区域与鼠标拖拽的虚线框相交
               if(ctrl.getRect().intersectsWith(::RECT(x,y,m,n)))
               {
                   //为了更好的观察,改变文本内容
                   ctrl.text = "选中了"
                   //将选中的控件用虚线框环绕
                   ::DrawFocusRect(::GetDC(hwnd),ctrl.getRect());
               }
            
           }
 
        }
        case 0x200/*_WM_MOUSEMOVE*/{
            if(flag){
                   
                //擦除上次画出的虚线框
                ::DrawFocusRect(::GetDC(hwnd),::RECT(x,y,m,n));
                var xxx,yyy = mouse.getPos();
                j,k=win.toClient(hwnd,xxx,yyy)
                //处理反向拖动
                if(j<x+(m-x)/2)
                    x=j;
                else 
                    m=j;
                if(k<y+(n-y)/2)
                    y=k;
                else 
                    n=k;
 
                //画出新的虚线框
                ::DrawFocusRect(::GetDC(hwnd),::RECT(x,y,m,n));  
                sleep(1); 
                   
            }
        }
 
 
    }
}
 
 
mainForm.enableDpiScaling();
mainForm.show();
 
return win.loopMessage();


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...