|
一、窗体拖动演示:
- import win.ui;
- /*DSG{{*/
- var winform = win.form(text="aardio form";right=599;bottom=399)
- winform.add(
- picturebox={cls="picturebox";left=132;top=100;right=430;bottom=259;border=1;notify=1;z=1}
- )
- /*}}*/
- //拖动窗体
- winform.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- winform.hitCaption()
- }
- }
- }
- //拖动picturebox时,窗体跟着动
- winform.picturebox.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- //winform.hitCaption() //效果一样
- ::SendMessageInt(winform.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0); //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
- return 0;
- }
- }
- }
- winform.show()
- win.loopMessage();
复制代码
二、按钮拖动,同时支持单击事件
方法1:
- import win.ui;
- /*DSG{{*/
- var winform = win.form(text="aardio form";right=599;bottom=399)
- winform.add(
- button={cls="button";text="button";left=171;top=157;right=392;bottom=237;z=1}
- )
- /*}}*/
- var oldX,oldY,newX,newY //定义鼠标按下时,和弹起时的坐标
- winform.button.oncommand = function(id,event){
- winform.msgbox( "我被单击了!!" );
- }
- //拖动窗体
- winform.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- winform.hitCaption()
- }
- }
- }
- //拖动按钮,当原地点击时响应按钮的oncommand命令 (借助win.getMessagePos方法)
- winform.button.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
-
- case 0x201/*_WM_LBUTTONDOWN*/ {
- oldX,oldY = win.getMessagePos(); //获取按下时坐标
- ::SendMessageInt(owner.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0); //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
-
- newX,newY = win.getMessagePos(); //获取弹起时坐标
- if(newX==oldX && newY==oldY){ //当鼠标原地按下并弹起时,运行按钮点击事件
- winform.button.oncommand(); //调用按钮事件
- }
- return 0;
- }
- }
- }
- winform.show()
- win.loopMessage();
复制代码
方法2:
- import win.ui;
- /*DSG{{*/
- var winform = win.form(text="aardio form";right=599;bottom=399)
- winform.add(
- button={cls="button";text="button";left=170;top=160;right=391;bottom=240;z=1}
- )
- /*}}*/
- var oldX,oldY,newX,newY //定义鼠标按下时,和弹起时的坐标
- winform.button.oncommand = function(id,event){
- winform.msgbox( "我被单击了!!" );
- }
- //拖动窗体
- winform.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- winform.hitCaption()
- }
- }
- }
- //拖动按钮,当原地点击时响应按钮的oncommand命令 (借助mouse.hook方法)
- winform.button.wndproc = function(hwnd,message,wParam,lParam){
- select (message) {
- case 0x201/*_WM_LBUTTONDOWN*/ {
- ::SendMessageInt(owner.hwnd, 0xA1/*_WM_NCLBUTTONDOWN*/, 0x2/*_HTCAPTION*/, 0); //拦截控件的 _WM_LBUTTONDOWN,并模拟标题栏拖动
-
- if(newX==oldX && newY==oldY){ //当鼠标原地按下并弹起时,运行按钮点击事件
- winform.button.oncommand(); //调用按钮事件
- }
- return 0;
- }
- }
- }
- import mouse.hook;
- var hook = mouse.hook();
- //录制回调函数
- hook.proc = function(msg,x,y,mouseData,injected,flags,timeStamp,extraInfo){
- if( injected ) return; //模拟鼠标不处理
-
- select(msg) {
- case 0x201/*_WM_LBUTTONDOWN*/{
- oldX=x
- oldY=y
- }
- case 0x202/*_WM_LBUTTONUP*/{
- newX=x
- newY=y
- }
- }
- }
- winform.show()
- win.loopMessage();
复制代码 |
|