Cedit 控制 – 访问冲突错误

编程


你好! 需要一些帮助 – 我有 MS VC++ 6 项目; 所以我只是尝试将 EDIT 控件添加到我的模态窗口(IDC_EDIT1)、变量 m_Edit1 (CEdit) 之一,即使在那之后也无法打开这样的窗口。 应用程序因“访问冲突”错误而崩溃 – NTDLL.DLL (0xC0000005)。 如果我通过类向导删除此变量 – 一切都会再次正常。 我在每个窗口中都发现了这个问题 – 即使在主窗体中也是如此。 这是什么意思? 谢谢你的支持。

我尝试过的:

头文件:

// Dialog Data
	//{{AFX_DATA(CNotebooksDlg)
	enum { IDD = IDD_NOTEBOOKS_DIALOG };
	CEdit	m_Edit1;
	CComboBox	m_ComboSerial;
	CComboBox	m_ComboDeviceType;
	CSortListCtrl	m_ctrlListHistory;

.cpp 文件:

//{{AFX_DATA_MAP(CNotebooksDlg)
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_COMBO_SERIAL_NUMBER, m_ComboSerial);
DDX_Control(pDX, IDC_COMBO_DEVICE_TYPE, m_ComboDeviceType);
DDX_Control(pDX, IDC_LIST_HISTORY, m_ctrlListHistory);

解决方案1

你需要打电话 m_Edit.create( style, rect, parent, ID) 然后才能使用 CEdit 对象。

解决方案2

使对话框中的控件与 MFC 程序一起使用需要三个步骤。 您执行了其中两个,省略第三个将导致您观察到的行为。 第三步是添加一个编辑控件到您的 IDD_NOTEBOOKS_DIALOG 与标识符 IDC_EDIT1 在资源文件中。 这通常是通过资源编辑器完成的,但如果您愿意,也可以手动完成。

FWIW,我使用 MFC 很长时间了,最​​终我养成了从不将对话框类声明放在头文件中的习惯,因为它是不必要的。 有了正确的接口,除了对话框本身之外,其他任何东西都不需要知道对话框的实现细节。 其中的关键是接口。 我要编写的典型界面会是这样的:

C++
bool OpenNotebookDlg( CWnd * pparent, NotebookData & data );

该函数的实现将使用对话框的代码,并使用数据初始化控件,然后,如果 OK 单击它会从对话框中提取数据并返回 true。 通常我会有一个 Edit 方法中的 NotebookData 类及其实现将调用所示的函数。 我发现这是一个非常干净且易于使用的实践。 需要注意的是,对话框代码必须了解它所显示的数据,但我认为这是一种公平且适当的权衡。

コメント

タイトルとURLをコピーしました