MFC:主界面调用子界面,子界面OnOk异常

我在主界面的OnInitDialog里面写了一个:
mainDlg.cpp:
BOOL CMainDlg::OnInitDialog()
{
........
if (m_LogonDlg.DoModal() != IDOK)
{
exit(1);
}

        //成功后做其他操作
}

LogonDlg.cpp:

当我点击登陆界面的ok的时候,触发了OnBnClickedOk,发送了一个请求登陆的消息给OnSendMessage去处理,OnSendMessage处理完毕后,在OnSendMessage中调用了CDialogEx::OnOK();然后回到主界面的OnInitDialog,就中断了。

  请教大家,如何修改啊。。。。

    ps:我的OnSendMessage如下:

首先定义了消息ON_MESSAGE(WM_USER_LOGON, OnSendMessage),
其中‘WM_USER_LOGON’是我定义的消息 ,指定收到这个消息用OnSendMessage处理。

 LRESULT CLogonDlg::OnSendMessage(WPARAM wParam, LPARAM lParam)
{
    BOOL32 bQuit = false;

    switch(wParam)
    {
        case EVENT_LOGON_ACK:
            {
                //其他显示登陆成功的操作省略
                bQuit = true;
                break;
            }
        default:
            break;
        }

    if(bQuit)
    {
        CDialogEx::OnOK();
        MSG_DEBUG(TEXT("登陆成功OnOk()"));
    }
    return 0;   
}
mfc

2个回答

你的逻辑有问题,窗体初始化都被弹出的对话框中断了,如何能处理后续的消息。
建议你将 if (m_LogonDlg.DoModal() != IDOK) 的使用,放在 WM_CREATE 消息中,或者在主窗体中设置一个短时间的Timer,当 Timer 到时再调用 。

dhwlhuaqin
二师兄89 谢谢,前两天问题解决了,忘记回复,不是我怀疑的原因,而是我忘记释放资源的原因,谢谢~~~
接近 5 年之前 回复
91program
91program 回复二师兄89: 出现中断,具体的内容呢?是不是你怀疑的原因,我不确定。但有一种可能是你的对话框的处理中存在异常,如越界,只是在最后窗体消毁时才表现出来。
接近 5 年之前 回复
dhwlhuaqin
二师兄89 hi,我设置了定时器,在定时器中调Logon函数打开Logon对话框,但还是会不定时的出现中断,是因为我在OnSendMessage中调用了CDialogEx::OnOk()的原因吗?
接近 5 年之前 回复
dhwlhuaqin
二师兄89 啊,好的,谢谢你,我试试~~
接近 5 年之前 回复
91program
91program 但是你可以考虑先隐藏主界面,或者使用线程来发送消息,线程可以先等主窗体创建完成。
接近 5 年之前 回复
91program
91program 回复二师兄89: 不行!
接近 5 年之前 回复
dhwlhuaqin
二师兄89 哦。。。。我原来是想要在主界面弹出之前就先执行LogonDlg的消息,等到Logon执行完毕,才让主界面出现。这样的话,用WM_CREATE或者Timer可以吗?
接近 5 年之前 回复

一般是OnInitDialog中创建一个定时器,然后定时器触发后,显示子对话框。这样就不会影响主对话框

dhwlhuaqin
二师兄89 我现在改了,设置了定时器,在定时器中调Logon函数打开Logon对话框,但还是会偶尔的出现中断,中断的地方就是我LogonDlg调用OnOk之后,是因为我在OnSendMessage中调用了CDialogEx::OnOk()的原因吗?
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问