繁体   English   中英

子对话框 - SetWindowTextA或SendMessageA崩溃程序 - MFC

[英]Child Dialog - SetWindowTextA or SendMessageA crashes program - MFC

错误:afxwin2.inl第165行

我的应用程序是一个带有几个编辑框的对话框。 单击按钮评估输入的信息后,我想打开子对话框以显示结果。 我尝试像这样重载DoModal():

//in the child dialog
//.h    
CResultsDlg::CResultsDlg(CParentDlg *parent); 
virtual INT_PTR DoModal(float bmi); 

//.cpp    
CResultsDlg::CResultsDlg(CParentDlg *parent) : CDialogEx(CResultsDlg::IDD), _parent(parent)
{   //initializations  }

INT_PTR CResultsDlg::DoModal(float bmi)
{
    m_sBMI.Format("%f", bmi);
    m_hBMI.SetWindowTextA(m_sBMI); //crashes !!!!!!!!!! 
    m_hBMI.SendMessageA(WM_SETTEXT, 0, (LPARAM)"15.11"); //crashes !!!!!!!! 

//  OnInitDialog(); //because this wasn't getting called at all
    return CDialogEx::DoModal();
}

BOOL CResultsDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
//  __super::OnInitDialog(); //no difference...

m_hBMI.SetWindowTextA("10.3"); //crashes !!!

return true;  // return TRUE unless you set the focus to a control
}


//in the parent dialog 
//.cpp
void CParentDlg::OnBnClickedCalculate()
{
    CResultsDlg childResultsDlg = this;
    childResultsDlg.DoModal(15.7);
}

m_hBMI是静态文本控件的句柄。 我测试了一个编辑框但它仍然崩溃了。 我知道它可能与尚未创建的控件有关,但我尝试了我所知道的每一种方式。

使用断点,我确认OnInitDialog根本没有被调用,除非我把它放在重载的DoModal函数中。 SetWindowText / SendMessage仍然在OnInitDialog中崩溃并出现相同的ASSERT错误。

如果我删除所有SetWindowText / SendMessage,那么子窗口确实会出现模态,但“结果”静态文本控件与我在对话框编辑器属性窗格中设置的文本相同。

谢谢 !!!!!

*更多细节* -----------

void CResultsDlg::DoDataExchange(CDataExchange* pDX)    // DDX/DDV support
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_BMI, m_fBMI);
    DDV_MinMaxFloat(pDX, m_fBMI, 0, 100);
    DDX_Control(pDX, IDC_BMI, m_hBMI);
}

启动对话框时的常用顺序是:

  • 你打电话给CDialog :: DoModal。
  • 对话框窗口已创建。
  • 创建对话框的子控件。
  • 调用OnInitDialog。
  • CDialog :: OnInitDialog调用DoDataExchange。
  • 您在DoDataExchange方法中有一个DDX_Control调用,以将子控件映射到成员变量。

请注意,成员变量仅在该序列的末尾初始化。 你之前尝试使用它们,所以你会崩溃。

将初始化所需的值存储在成员变量中,并在DoDataExchange中处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM