c++ MFC -在CDialog::OnSize事件(GetWindowRect)上没有抛出运行时错误的代码执行失败

C++ MFC - code execution failure without throwing runtime error on CDialog::OnSize event (GetWindowRect)

本文关键字:运行时错误 执行 代码 失败 MFC CDialog OnSize GetWindowRect 事件 c++      更新时间:2023-10-16

我正在尝试访问CDialog::OnSize事件处理程序中的控制大小属性。代码编译并运行,但似乎在GetWindowRect失败。我没有看到任何运行时错误被抛出,但是包括GetWindowRect调用在内和之后的代码静默地运行失败。

我在发布和调试模式下运行,在适当的位置有断点(没有击中GetWindowRect)。我还使用代码修改了一些成员变量之后的GetWindowRect作为一个额外的测试,我也可以看到没有运行。

virtual void CMainFormDialog::OnSize(UINT nType, int cx, int cy) 
{
    ....
    auto pOutputEdit = (CEdit*) GetDlgItem(CE_OutputEdit);
    CRect pOutputEditRect;
    // No code is executed following this statement... 
    pOutputEdit->GetWindowRect(&pOutputEditRect);
    ....
}

是有什么问题的方式,我试图访问我的信用控制的属性在这里,为什么它无声地失败?

谢谢。

OnSize可能作为对话框创建的一部分被调用,此时CE_OutputEdit可能尚未创建。CE_OutputEdit作为OnInitDialog的一部分被创建和绑定。检查GetDlgItem的返回值,只有当它返回非NULL时才执行你需要做的事情。

如果需要,在调用CDialog::OnInitDialog并完成其他必要的初始化后使用设置为true的变量。然后在OnSize中使用这个变量来确定是否应该进行处理。无论如何,您仍然应该检查GetDlgItem

的返回值