需求:在某个button响应中,可能会执行一段耗时较长的函数,在调用这个函数的过程中,为了提示用户当前程序正在执行而不是死机,需要弹框让用户知道。并且当该函数执行完成后,提示对话框关闭。
解决:网上有很多问这个问题和解决这个问题的,但是都不直接和明确。首先我不需要多线程实现,我只是弹出一个提示框,不需要这个对话框做进度动画,一个静态的提醒就够了。其次,静态实现的解答中,遇到了弹出对话框是空白,没有响应的控件的问题。
这里贴出真正能够解决的方案:
// 1.非模态对话框创建和显示
CDialog dlg;
dlg.Create(IDD_DIALOG1); //IDD_DIALOG_SHOW为创建的要弹出的对话框
dlg.CenterWindow(this); //对话框居中显示
dlg.SetDlgItemText(IDC_WAIT, "Alg running, please Wait..........");
dlg.ShowWindow(SW_SHOWNOACTIVATE);
dlg.UpdateWindow(); // 这个最重要,不执行控件无法显示
// 2.自己比较耗时的函数调用
// here call your own long-time process
// 3.关闭对话框
dlg.EndDialog(0);//处理完,关闭对话框
注:其中,IDD_DIALOG1为自己新插入的一个对话框:
IDC_WAIT为新建对话框中的一个static 控件。
网友评论