Environment: Visual C++ 6
I’ve been searching for a simple answer to a problem. I wanted to increase the
display update rate for a dialog box. This (modeless) dialog includes a progress bar,
and it displays a percentage number and another number indicating progress (initially in
edit boxes). When I’d disable the display update functions (m_progress.SetPos() and
dlg->UpdateData(FALSE), the function generating these numbers would complete in half
the time. I tried using a DC and the TextOut() function (rather than updating the
edit boxes), but that didn’t speed things up either. Until I looked at the myriad
of windows messages sent when I used
UpdateData(FALSE) I didn’t realize the origin
of the wasted time. It’s all due to the “repainting” of the main app window (frame).
Since I’m (relatively) inexperienced with MFC, I’m delighted to find such a simple solution.
When you display the dialog box hide the main window (if you don’t require it’s use at
that time). I don’t use the UpdateData(FALSE) function, but I still see the information
on the screen, and the progress bar updates as expected (in a negligible amount of time).
I’m sure some of you may see holes in my theory, but this works fine for my app.
BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); CWnd* temp_main_wnd = AfxGetMainWnd(); temp_main_wnd->ShowWindow(SW_HIDE); } void CMyOperation::GetDataAndDisplay() { unsigned int m_percent = 0; unsigned int m_other_data = 0; int x = 200; int y = 200; CMyDialog* dlg; CDC* TempDC = NULL; CDC LocalDC; dlg = new CMyDialog; dlg->Create(IDD_MY_DIALOG, NULL); dlg->ShowWindow(SW_SHOWNORMAL); TempDC = dlg->GetDC(); LocalDC.m_hAttribDC = TempDC->m_hAttribDC; LocalDC.m_hDC = TempDC->m_hDC; ... ... // When it's time to update the display... dlg->m_progress.SetPos(m_percent); LocalDC.TextOut(x, y, m_percent); LocalDC.TextOut(x, y + 50, m_other_data); ... ... } void CMyDialog::OnCancel() { CWnd* temp_main_wnd = AfxGetMainWnd(); temp_main_wnd->ShowWindow(SW_SHOW); CDialog::OnCancel(); }