[ad_1]
你好! 需要一些帮助 – 我有 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 很长时间了,最终我养成了从不将对话框类声明放在头文件中的习惯,因为它是不必要的。 有了正确的接口,除了对话框本身之外,其他任何东西都不需要知道对话框的实现细节。 其中的关键是接口。 我要编写的典型界面会是这样的:
bool OpenNotebookDlg( CWnd * pparent, NotebookData & data );
该函数的实现将使用对话框的代码,并使用数据初始化控件,然后,如果 OK
单击它会从对话框中提取数据并返回 true。 通常我会有一个 Edit
方法中的 NotebookData
类及其实现将调用所示的函数。 我发现这是一个非常干净且易于使用的实践。 需要注意的是,对话框代码必须了解它所显示的数据,但我认为这是一种公平且适当的权衡。
[ad_2]
コメント