查找一个屏幕上给定的点是不是在矩形范围内:PtInRect()

By admin at 2017-12-10 • 0人收藏 • 980人看过

listbox的hitTest函数使用了此方法判断

hitTest = function(x,y,screen=false){
            if( !(x && y) ){
                x,y = ..win.getMessagePos();
                screen = true;
            } 
            if(screen) x,y = ..win.toClient(owner.hwnd,x,y)
            //遍历所有的列表项,看点是否在之内
            var rc = ::RECT();
            for(i=1;owner.count;1){
                if(! owner.getItemRect(i,rc) ) return; 
                if( ::PtInRect(rc,x,y) )
                        return i; 
            } 
        };

这个PtInRect()方法可以用到自定义区域产生右键彩蛋上。

1 个回复 | 最后更新于 2021-07-05
2021-07-05   #1

image.png

随便测试下:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
picturebox={cls="picturebox";left=78;top=11;right=722;bottom=404;bgcolor=12639424;notify=1;z=1};
static={cls="static";text="Static123";left=245;top=32;right=336;bottom=87;bgcolor=8421376;z=2};
static2={cls="static";text="Static125";left=378;top=166;right=469;bottom=221;bgcolor=8421376;z=3};
static3={cls="static";text="Static124";left=493;top=64;right=584;bottom=119;bgcolor=8421376;z=4};
static4={cls="static";text="Static126";left=307;top=300;right=398;bottom=355;bgcolor=8421376;z=5}
)
/*}}*/

import console
console.open()

for Chwnd in win.eachChild(winform.hwnd) {
  		console.log(Chwnd,winform.getCtrl(Chwnd).text)
}
			

var rc = ::RECT(100,100,200,200);
winform.static.setParent(winform.picturebox)
winform.static2.setParent(winform.picturebox)
winform.static3.setParent(winform.picturebox)
winform.static4.setParent(winform.picturebox)

winform.picturebox.wndproc = function(hwnd,message,wParam,lParam){
	select( message ) { 
		case 0x201/*_WM_LBUTTONDOWN*/{
			//鼠标右键弹起,下面获取坐标
			var x,y = win.getMessagePos(lParam);

			for Chwnd in win.eachChild(winform.picturebox.hwnd) {
  				 var rec = winform.getCtrl(Chwnd).getRect();
  				 if(::PtInRect(rec,x,y)){
  				 	console.log(win.getText(Chwnd))
  				 	return;
  				 }
			}
			console.log(x,y)
	
		}
		else{
			
		}
	}
	//无返回值则继续调用默认回调函数
}

winform.show();

gdi.fillRect(::GetDC(winform.hwnd),0xcc2266,rc);
win.loopMessage();


登录后方可回帖

登 录
信息栏
公告:
个人博客
专注分享
可在分享中适当提问
谢绝纯提问
否则不再提醒一律
删帖
谢谢合作!



本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
Loading...