|
最近要用到摄像头,界面上只是显示摄像头中一部分图像,但是要显示的图像位置不确定,所以需要能够通过手动拖动来调整显示区域。
所以,今天试着写了下这个功能的简化版。
实现方式:
闭包,鼠标Hook
虽然实现了这个功能,但是,也不知道是不是我电脑的问题,拖动的过程中总感觉一卡一卡的。好奇怪,希望有兴趣的人,帮我测试下。
当然,有更好的办法,能改进下就更好了
- import win.ui;
- /*DSG{{*/
- var winform = win.form(text="鼠标拖动图像调整显示区域测试";right=639;bottom=377)
- winform.add(
- plus={cls="plus";left=126;top=102;right=490;bottom=268;border={color=-16777216;width=1};clipBk=false;clipch=1;foreRepeat="scale";notify=1;z=1}
- )
- /*}}*/
- var bmp = gdip.bitmap( "http://bbs.aardio.com/data/attachment/forum/201804/28/234719vy3uyoqq65bb22lb.jpg.thumb.jpg" );
- //定义显示图像的左上点坐标
- var leftUpX = (bmp.width-winform.plus.width)/2;
- var leftUpY = (bmp.height-winform.plus.height)/2;
- //设置图像显示区域
- var setImg = function(x,y){
- winform.plus.background = bmp.clone(x,y,winform.plus.width,winform.plus.height);//在图像上裁剪一块下来 ;
- }
- setImg(leftUpX,leftUpY);
- function 图像调整(){
- var posX,posY = leftUpX,leftUpY;
- var moveImg = function(x,y){
- //X轴调整
- if(x<0){
- if( posX<=0 ){}
- else {
- posX = posX + x;
- };
- }else {
- if( posX>=(bmp.width-winform.plus.width) ){}
- else {
- posX = posX + x;
- }
- }
- //Y轴调整
- if(y<0){
- if( posY<=0 ){}
- else {
- posY = posY + y;
- };
- }else {
- if( posY>=(bmp.height-winform.plus.height) ){}
- else {
- posY = posY + y;
- }
- }
- setImg(posX,posY);
- }
- return moveImg;
- }
- moveImg = 图像调整();
- import mouse;
- import mouse.hook;
- winform.plus.wndproc = function(hwnd,message,wParam,lParam){
- select(message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- var startX,startY = win.toClient(winform.hwnd,mouse.getPos())
- var hk = mouse.hook();
- hk.proc = function(msg,x,y,mouseData,injected,flags,timeStamp,extraInfo){
- if( injected ) return;
- select(msg) {
- case 0x202/*_WM_LBUTTONUP*/{
- //释放鼠标Hook
- hk.close();
- }
- case 0x200/*_WM_MOUSEMOVE*/{
- var nextX,nextY = win.toClient(winform.hwnd,x,y);
- moveImg(startX-nextX,startY-nextY);
- startX,startY = nextX,nextY;
- }
- }
- }
- }
- }
- }
- winform.show()
- win.loopMessage();
复制代码 |
|