1. 程式人生 > >MFC多執行緒對話方塊顯示進度和狀態

MFC多執行緒對話方塊顯示進度和狀態

如,我要將一些當前程式的資料列印為PDF,這個過程需要一段時間,需要設定進度條,可以選擇一個彈窗式的進度條。  建立共享變數 int m_process;//進度條進度,0-100 CString m_status;//當前程式狀態輸出文字 首先,建立一個對話方塊,並建立與其對應的類CJingDuTiao,新增一個進度條控制元件繫結m_ctrlProgress, 新增一個static用於輸出文字。對話方塊CPP頂端共享上述兩個變數 然後在對話方塊對應的類中新增兩個函式: void CJingDuTiao::OnTimer(UINT nIDEvent) { if(m_process==100)
{
OnOK();
}
else if(m_process!=0)
{
m_progress.SetPos(m_process);
if (((CStatic*)GetDlgItem(IDC_STATUS))->GetSafeHwnd())  
{  
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATUS);  
ASSERT(pStatic);  
  
CRect rc;  
pStatic->GetWindowRect(&rc);  
ScreenToClient(&rc);  
InvalidateRect(&rc);  
}  
SetDlgItemText(IDC_STATUS,m_status);
}
CDialogEx::OnTimer(nIDEvent); } BOOL CJingDuTiao::OnInitDialog()
{
CDialogEx::OnInitDialog();


// TODO:  在此新增額外的初始化
KillTimer(1);
SetTimer(1,20,NULL);
return TRUE;  // return TRUE unless you set the focus to a control
// 異常: OCX 屬性頁應返回 FALSE
} 再在主程式(MainFrm)中新增兩個子程序需要處理的函式,注意要在.h中USING namespace std後宣告UINT   PrintPdf_thread(LPVOID pParam); 如: void C單腔模擬View::PrintPdf(int print_pic_each,int print_pic_all, int print_sheet, int print_property)
{ {  for(int i = 0; i < 1000; i++) {   m_process++;   Sleep(50);  } m_process = 100; return 0; } 這個函式(function)是用來控制進度條變化的函式。 UINT PrintPdf_thread(LPVOID pParam) { C單腔模擬View* pInfo2=(C單腔模擬View*)pParam;
pInfo2->PrintPdf(print_pic_each,print_pic_all,print_sheet,print_property);
 return 0; } 最後在需要運動進度條的地方新增 AfxBeginThread(PrintPdf_thread,this);//申請一個程序來執行function1,也就是主程式處理程式碼。  if(dlg1.DoModal()==IDOK)//模態顯示對話方塊,此時主程式程式碼執行到此,不往下執行,直至對話方塊關閉,但是兩個 { 需等待print結束之後執行的程式碼 } //子程序始終在執行中。 其中dlg1是對話方塊的一個物件。 這樣一個同事處理資料且顯示進度條對話方塊的功能就實現了。