查找一个屏幕上给定的点是不是在矩形范围内:PtInRect()
By
admin
at 2017-12-10 • 0人收藏 • 1405人看过
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
登录后方可回帖
随便测试下:
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();