在使用MFC编写界面程序时,有时候会遇到像点击按钮后,后台进行大量操作后才显示处理结果这种情况,在后台处理过程中,界面不应该被允许做任何操作,这里介绍一种方法。
解决办法
点击按钮后,弹出一个模态对话框,在对话框中的OnInitDialog中开启线程处理后台操作,在处理完毕后自动关闭窗口。
步骤
1.对话框类头文件定义
HANDLE m_hThread;
2.在OnInitDialog函数中开启线程
1 unsigned threadID; 2 m_hThread = (HANDLE)_beginthreadex(NULL,0,&QueryHisData,(LPVOID)this,0,&threadID);
3.在QueryHisdata函数中调用实际的处理函数
1 unsigned __stdcall QueryHisdata(void* pArguments) 2 { 3 CQueryWaitDlg* pDlg = (CQueryWaitDlg*)pArguments; 4 static_cast<CMainFrame*>(AfxGetApp()->m_pMainWnd)->QueryHisData(pDlg->GetBeginTime(),pDlg->GetEndTime());//处理查询操作 5 pDlg->PostMessage(WM_CLOSE,0,0); //向对话框发送关闭消息 6 return 0; 7 }
4.在OnDestroy中关闭线程句柄
1 if(m_hThread != NULL) 2 { 3 CloseHandle(m_hThread); 4 m_hThread = NULL; 5 }