C ++ MFC - 代码执行失败而不会在CDialog :: OnSize事件上抛出运行时错误(GetWindowRect)

时间:2014-05-15 10:41:12

标签: c++ mfc

我正在尝试访问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);

    ....
}

我在这里尝试访问CEdit控件的属性的方式是否有问题,为什么它会无声地失败?

感谢。

1 个答案:

答案 0 :(得分:2)

在可能尚未创建CE_OutputEdit的位置,可能会将OnSize称为对话框创建的一部分。 CE_OutputEdit已创建并绑定为OnInitDialog的一部分。检查GetDlgItem的返回值,只执行返回非NULL时需要执行的操作。

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

的返回值