等待窗体完全关闭方式

By admin at 2019-07-06 • 0人收藏 • 183人看过

有时候,窗体里写了很多个线程, 这些线程还不能(不应该)直接被关闭, 需要等待这些线程自己退出之后,窗体才关闭.

这些线程里有一些关闭时候的耗时操作, 那么此时关闭窗体就会出现等待了好一会窗体才关闭的现象, 这样明显是不友好的, 需要提示用户窗体正在关闭功能中, 请稍后.

于是, 就有了下面的代码

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;

效果如下:

当用户点击了关闭的时候, 会弹出关闭中提示,并禁用鼠标点击事件. 当耗时操作结束, 窗体和提示窗会自动关闭.

GIF.gif

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...