等待窗体完全关闭方式

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

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

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

于是, 就有了下面的代码

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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



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

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

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...