Convert modal dialogs to modeless

Many postings to CodeGuru and similar discussion groups are questions about modeless dialogs and how to keep them from blocking the parent thread. I use a user interface thread to start a conventional modal dialog that behaves modeless-ly and it's so minimalist and easy I thought others may be interested...


  1. In your header file define a CWinThread-derived class...
      class CDialogThread : public CWinThread { DECLARE_DYNCREATE(CDialogThread) CDialogThread() {}; virtual BOOL InitInstance(); };
  2. Put this in your implementation file (where CSomeDialog is a conventional dialog class defined the usual way).
      IMPLEMENT_DYNCREATE(CDialogThread, CWinThread) BOOL CDialogThread::InitInstance() { CSomeDialog dlg; dlg.DoModal(); return FALSE; }
  3. To create an instance of your (now-modeless) modal dialog, do this...
      AfxBeginThread ( RUNTIME_CLASS(CDialogThread) );
  4. You can end the dialog the normal way by calling CDialog::EndDialog(), CDialog::OnCancel() or CDialog::OnOK(). All those special caveats about modeless dialogs (like "don't call EndDialog") no longer apply with this approach.

  5. One point to note is the return of 'FALSE' from the InitInstance() override. This tells MFC that the thread didn't start successfully, so MFC does our cleanup for us! Note that by this time the dialog has already returned and we're through with the thread. This is the same thing MFC-generated code does in the InitInstance() of dialog-based applications.


Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there's simply not enough quality talent to go around. In response, companies often resort to inferior solutions -- hiring substandard developers and engineers, recruiting talent on a part-time or temporary basis, poaching people from competitors, or burdening an already stressed IT staff for more of their labor. Fortunately, there's a better solution. Read this white paper to learn the business value of …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date