التحكم في Cedit – خطأ في انتهاك الوصول


مرحبًا! بحاجة إلى بعض المساعدة – لدي مشروع MS VC++ 6؛ لذلك أحاول فقط إضافة عنصر تحكم التحرير إلى إحدى نافذتي المشروطة (IDC_EDIT1) والمتغير m_Edit1 (CEdit) وحتى بعد ذلك من المستحيل فتح مثل هذه النافذة. تعطل التطبيق بسبب خطأ “انتهاك الوصول” – NTDLL.DLL (0xC0000005). إذا قمت بإزالة هذا المتغير عبر Class Wizard – فكل شيء على ما يرام مرة أخرى. ولقد وجدت هذه المشكلة في كل نافذة – حتى في النموذج الرئيسي. ماذا يعني ذلك؟ شكرا لكم على الدعم.

ما حاولت:

الملف الاساسي:

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

ملف سي بي بي:

//{{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 يتم النقر عليه لاستخراج البيانات من مربع الحوار وإرجاع صحيح. عادة ما يكون لدي Edit الطريقة في NotebookData فئة وتنفيذها سوف تستدعي الوظيفة المعروضة. لقد وجدت أن هذه ممارسة نظيفة جدًا وسهلة الاستخدام. التحذير الوحيد لذلك هو أن رمز الحوار يجب أن يعرف البيانات التي يعرضها ولكني أعتبر ذلك مقايضة عادلة ومناسبة.

コメント

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