等待窗体完全关闭方式
By
admin
at 2019-07-06 • 0人收藏 • 1837人看过
有时候,窗体里写了很多个线程, 这些线程还不能(不应该)直接被关闭, 需要等待这些线程自己退出之后,窗体才关闭.
这些线程里有一些关闭时候的耗时操作, 那么此时关闭窗体就会出现等待了好一会窗体才关闭的现象, 这样明显是不友好的, 需要提示用户窗体正在关闭功能中, 请稍后.
于是, 就有了下面的代码
mainfrom主窗体:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio工程35";right=959;bottom=591)
mainForm.add()
/*}}*/
mainForm.onClose = function(hwnd,message,wParam,lParam){
//显示友好关闭提示界面
var cm = mainForm.loadForm("\dlg\closeTip.aardio");
//修改提示窗体位置覆盖到主窗体上方,禁止用户再操作
var x,y,cx,cy = mainForm.getPos()
//计算提示窗体出现位置
cm.setPos(x+cx/2-cm.width/2,y+cy/2-cm.height/2)
cm.show()
//模拟耗时操作
win.delay(4000)
}
mainForm.show();
return win.loopMessage();closeTip窗体:
import win.ui;
/*DSG{{*/
var winform = win.form(text="正在关闭中,请稍后...";right=451;bottom=33;exmode="toolwindow";mode="popup")
winform.add(
plus={cls="plus";left=0;top=0;right=639;bottom=34;bgcolor=6447459;db=1;dl=1;dr=1;dt=1;forecolor=9959653;hide=1;notify=1;z=1}
)
/*}}*/
//设置进度区间,可自动切换到进度条显示模式
winform.plus.setProgressRange(1,50);
winform.plus.startProgress(50);
import win.ui.mask
win.ui.mask(mainForm,true).show()
/*
//进程自杀
myKill = function(){
import process;
::ExitProcess = ::Kernel32.api("ExitProcess","int(int)" );
ExitProcess(process.getId());
}
winform.plus.onDrawForegroundEnd = function(graphics,rc){
//如果进度条到达100%,立即主进程自杀(慎用)
if(winform.plus.progressPercentage>=100){
myKill();
}
}
*/
winform.show();
win.loopMessage();
return winform;效果如下:
当用户点击了关闭的时候, 会弹出关闭中提示,并禁用鼠标点击事件. 当耗时操作结束, 窗体和提示窗会自动关闭.

登录后方可回帖