win.ui.tracker 输入跟踪器的使用

By admin at 2019-01-20 • 0人收藏 • 1345人看过

aardio作者jacen之前也说,plus的鼠标事件功能就是这个实现的,

有些窗体或者控件需要鼠标事件的话,可以使用这个.

下面利用这个功能实现鼠标拖动摄像头上面的一根线移动


image.png

import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=812;bottom=577;bgcolor=16777215)
winform.add(
picturebox={cls="picturebox";left=22;top=23;right=710;bottom=374;bgcolor=15780518;db=1;dl=1;dr=1;dt=1;notify=1;z=1};
plus={cls="plus";left=370;top=305;right=527;bottom=362;bgcolor=65280;z=3};
plus2={cls="plus";text="预览按钮效果";left=605;top=301;right=747;bottom=356;bgcolor=-8355840;font=LOGFONT(h=-16;name='FontAwesome';charset=0);hide=1;notify=1;z=2};
plus3={cls="plus";left=183;top=19;right=185;bottom=383;bgcolor=255;notify=1;z=4}
)
/*}}*/

winform.plus2.skin({
	background={
		active=0xFFCF8E2D;
		default=0xFF008080;
		hover=0xFF00C2C2
	};

})

winform.plus.skin({
	background={
		active=0xFFCF8E2D;
		default=0xFF008080;
		hover=0xFF00C2C2
	};

})

var VideoCapX1 = winform.picturebox.createEmbed("{912FB007-DD9A-11D3-BD8D-DAAFCB8D9378}")
var cap = VideoCapX1._object
cap.GetVideoDeviceCount()
cap.GetVideoDeviceName(0)
cap.setVideoDeviceIndex(0)
cap.setPreviewAudio(0);
cap.setPreviewScale(true)
cap.setConnected(true)
cap.setPreview(true)

//自绘plus背景
/*
winform.plus3.onDrawBackground = function(graphics,rc,backgroundColor,clr){
    var pen = gdip.pen(backgroundColor,2);
    graphics.drawLine(pen,(rc.right-rc.left)/2,rc.top,(rc.right-rc.left)/2,rc.bottom);
    pen.delete()
    return true;//返回true阻止绘制默认背景
}
*/

winform.plus2.oncommand = function(id,event){
	winform.msgbox("点击了")
}

winform.plus3.setParent(winform.picturebox)

winform.plus2.setParent(winform.picturebox)
winform.plus.setParent(winform.picturebox)
winform.picturebox.setParent(winform)


var tack2 = win.ui.tracker(winform.plus3);
tack2.onMouseEnter = function(wParam,lParam){
	 win.ui.waitCursor(true,::User32.LoadCursor(null,0x7F84/*_IDC_SIZEWE*/));
}
tack2.onMouseLeave = function(wParam,lParam){
	win.ui.waitCursor(false);
}
import mouse
tack2.onMouseDrag = function(wParam,lParam){ 
    //var x,y = win.getMessagePos(lParam);
    var x,y = mouse.getPos();
    var fx,fy = win.toClient(winform.picturebox.hwnd,x,y)
    //var fx,fy = win.toClient(winform.hwnd,x,y)
	 var xx,yy,cx,cy = winform.plus3.getPos()
	 winform.plus3.setPos(fx,yy);
}



winform.show() 
win.loopMessage();


2019-12-1日更新:

其实上面的写法还是有点问题的, 不知道看的人发现了没有....

1, plus控件自带了track功能, 所以没有必要再封装一层, 是可以直接使用onMouse...的

2,可以不用导入mouse库, 既然plus的回调事件里已经获取到了message,那么完全可以直接使用,

可以修改如下:

winform.plus.onMouseEnter = function(wParam,lParam){
	win.ui.waitCursor(true,::User32.LoadCursor(null,0x7F85/*_IDC_SIZENS*/));
}
winform.plus.onMouseLeave = function(wParam,lParam){
    win.ui.waitCursor(false);
}

winform.plus.onMouseDrag = function(wParam,lParam){ 
    var x,y = win.getMessagePos(lParam);
    var px,py = winform.plus.getPos();

    winform.plus.setPos(px,py+y);
}

 明显上面的写法更简洁.

1 个回复 | 最后更新于 2019-01-23
2019-01-23   #1

IDC_APPSTARTING 标准的箭头和小沙漏

IDC_ARROW 标准的箭头

IDC_CROSS 十字光标

IDC_HAND Windows 98/Me, Windows 2000/XP: Hand

IDC_HELP 标准的箭头和问号

IDC_IBEAM 工字光标

IDC_ICON Obsolete for applications marked version 4.0 or later.

IDC_NO 禁止圈

IDC_SIZE Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL.

IDC_SIZEALL 四向箭头指向东、西、南、北

IDC_SIZENESW 双箭头指向东北和西南

IDC_SIZENS 双箭头指向南北

IDC_SIZENWSE 双箭头指向西北和东南

IDC_SIZEWE 双箭头指向东西

IDC_UPARROW 垂直箭头

IDC_WAIT 沙漏,Windows7系统下会显示为选择的圆圈表示等待


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...