CWnd::OnCreate函数从未被调用

CWnd::OnCreate function never get called

本文关键字:调用 函数 OnCreate CWnd      更新时间:2023-10-16

概述:
我有两个实用程序,它们都有相同的通用界面,即打开一个对话框"请求用户名">
"请求用户名"的代码是在不同的库中编写的,这两个实用程序都调用该库。

问题:

在1个实用程序中,它工作得很好,我得到了这个对话框,它请求用户名,但在其他实用程序中它没有出现。

我的调查:在更深入的调查中,我发现这两个实用程序都调用CDialog::DoModal((,后者反过来调用onCreate((。在我的另一个实用程序中,断点从未命中Create函数。知道为什么吗?

样本代码

// IN actual Utility
//somewhere in code 
Dialog_for_common_interface dlg( message.c_str(), "Please enter username:" );
        CString username;
        bool is_correct = ( dlg.DoModal(username) == IDOK )
// IN Dialog_for_common_interface
int  Dialog_for_common_interface::DoModal ( CString &_reply_c )
{
    int result_i = CDialog::DoModal(); // break point hits this but value of result_i = -1;
    if ( result_i == IDOK )
    {
        _reply_c = reply_c;
    }
    return result_i;
}
// Breakpoint nver hits the below function
int Dialog_for_common_interface::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;
    SetWindowText( title_c );
    return 0;
}

将对话框资源复制到两个exe项目中。并确保它们对对话框资源使用相同的ID值。