How to end a dialog mfc application from CDialog::OnInitDialog or immediately after this function ends?

1.8k views Asked by At

In one case of my application, I want to end the application in the dialog's OnInitDialog or immediately after this function. Is there any way to do it?

I tried using windows messages – in OnInitDialog calling SendMessage and in the handler of the sent message calling OnClose – but it didn't do what I intended since the dialog still appeared.

3

There are 3 answers

0
Roman Ryltsov On BEST ANSWER

PostQuitMessage(0) in the WM_INITDIALOG handler body will do the job.

0
Mark Ransom On

You can simulate the user clicking the X in the corner of the dialog by sending a WM_SYSCOMMAND message:

PostMessage(WM_SYSCOMMAND, SC_CLOSE, 0);
0
Lambert Duran On

The easiest solution:

    CMyDialog::OnInitDialog()
    {
       if( "My Condition is invalid" )
       {
         EndDialog(-1);
         return FALSE;
       }
    }

You have to do "return FALSE" juste after EndDialog because as you can read in the Microsoft documentation CDialog(classe), EndDialog doesn't close the dialog immediately, but generates a notification which when handled by Microsoft has to effect to end the dialog.