0

我在 VS 2012 的可视化资源编辑器中创建了应用程序主窗体上的几个组件(其中一个是CStatic文本)。

我现在想访问它,所以我在MainFrm.cpp的某个地方写了(代码在单击其中一个按钮后执行,所以在构造完所有内容之后):

CStatic * temp = (CStatic *) GetDlgItem(IDC_OPERATION_INFO);
temp->SetWindowText(text);

在执行代码的第二行时,出现错误:

Debug Assertion Failed!
Program: C:\Windows\system32\mfc110ud.dll
File: f:\\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp
Line: 245

我做错了什么?

CStatic是通过可视化编辑器创建的,而不是在代码中。Ofc 我在应用程序上看到它。

4

2 回答 2

1

静态控件可能位于 CDialog 或 CFormView 派生类上,而不是 CMainFrame。GetDlgItem 仅适用于调用类的子控件。

访问控件的更好方法是在可视化编辑器中右键单击它并选择“添加变量”。它将允许您将 CStatic 变量(如 m_opinfo)添加到正确的父类。然后该类可以调用 m_opinfo.SetWindowText(text)。

于 2013-08-29T16:54:20.380 回答
0

您还应该注意 GetDlgItem 使用起来可能不安全,因为它返回一个临时指针。该指针仅对正在执行的代码(方法)的范围有效。您应该遵循 ScottMcP 的建议。

于 2013-09-02T19:08:35.230 回答