我在VS 2012中的可视化资源编辑器中创建了应用程序主窗体上的几个组件(其中一个是CStatictext)。
我现在想访问它,所以我在MainFrm.cpp中的某个地方写了一篇文章(代码在点击其中一个按钮后执行,所以在构建完所有内容之后):
CStatic * temp = (CStatic *) GetDlgItem(IDC_OPERATION_INFO);
temp->SetWindowText(text);
在执行第二行代码时,我得到了错误:
Debug Assertion Failed!
Program: C:Windowssystem32mfc110ud.dll
File: f:\ddvctoolsvc7libsshipatlmfcsrcmfcwinocc.cpp
Line: 245
我做错了什么
CStatic是通过可视化编辑器创建的,而不是在代码中创建的。Ofc我在申请表上看到了。
静态控件可能在CDialog或CFormView派生类上,而不是CMainFrame上。GetDlgItem仅适用于作为调用类的子级的控件。
访问控件的更好方法是在可视化编辑器中右键单击控件,然后选择"添加变量"。它将允许您向正确的父类添加一个CStatic变量(如m_opinfo)。然后该类可以调用m_opinfo.SetWindowText(text).
您还应该注意,GetDlgItem使用起来可能不安全,因为它返回了一个临时指针。指针仅对正在执行的代码(方法)的作用域有效。你应该听从ScottMcP的建议。