SetWindowTextA或SendMessageA崩溃程序
错误: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,那么子窗口确实会像它应该显示的那样,但'result'静态文本控件与我在对话框编辑器属性窗格中设置的文本相同。
谢谢 !!!!!
*更多详细信息* -----------
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);
}
开始对话时的通常顺序是:
请注意,成员变量只在该序列的末尾被初始化。 你之前试图使用它们,所以你会崩溃。
将初始化所需的值存储在成员变量中,并在DoDataExchange中处理。
链接地址: http://www.djcxy.com/p/39239.html上一篇: SetWindowTextA or SendMessageA crashes program
下一篇: extra initialization in new window of a MFC/OpenCV project