我正在尝试访问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控件的属性的方式是否有问题,为什么它会无声地失败?
感谢。
答案 0 :(得分:2)
在可能尚未创建CE_OutputEdit
的位置,可能会将OnSize称为对话框创建的一部分。 CE_OutputEdit
已创建并绑定为OnInitDialog
的一部分。检查GetDlgItem的返回值,只执行返回非NULL时需要执行的操作。
如果需要,请在调用CDialog::OnInitDialog
并完成其他必要的初始化后使用设置为true的变量。然后在OnSize
中使用此变量来确定是否应该进行处理。无论如何,您仍应检查GetDlgItem