Can I return a custom value from a dialog box's DoModal function?

前端 未结 3 1641
灰色年华
灰色年华 2020-12-21 15:47

What I wish to do is, after creating a dialog box with DoModal() and pressing OK in the box to exit it, to have a custom value returned. For example, a couple o

3条回答
  •  悲哀的现实
    2020-12-21 16:19

    You can't change the return value of the DoModal() function, and even if you could, I wouldn't recommend it. That's not the idiomatic way of doing this, and if you changed its return value to a string type, you would lose the ability to see when the user canceled the dialog (in which case, the string value returned should be ignored altogether).

    Instead, add another function (or multiple) to your dialog box class, something like GetUserName() and GetUserPassword, and then query the values of those functions after DoModal returns IDOK.

    For example, the function that shows the dialog and processes user input might look like this:

    void CMainWindow::OnLogin()
    {
        // Construct the dialog box passing the ID of the dialog template resource
        CLoginDialog loginDlg(IDD_LOGINDLG);
    
        // Create and show the dialog box
        INT_PTR nRet = -1;
        nRet = loginDlg.DoModal();
    
        // Check the return value of DoModal
        if (nRet == IDOK)
        {
            // Process the user's input
            CString userName = loginDlg.GetUserName();
            CString password = loginDlg.GetUserPassword();
    
            // ...
        }
    }
    

提交回复
热议问题