Cedit नियंत्रण – पहुँच उल्लंघन त्रुटि


नमस्ते! कुछ मदद चाहिए – मेरे पास MS VC++ 6 प्रोजेक्ट है; इसलिए मैं बस अपनी एक मोडल विंडो (IDC_EDIT1), वेरिएबल m_Edit1 (CEdit) में EDIT नियंत्रण जोड़ने का प्रयास कर रहा हूं और उसके बाद भी ऐसी विंडो को खोलना असंभव है। एप्लिकेशन “एक्सेस उल्लंघन” त्रुटि के साथ क्रैश हो गया – 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;

सीपीपी फ़ाइल:

//{{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

एमएफसी प्रोग्राम के साथ संवाद कार्य में नियंत्रण बनाने के तीन चरण हैं। आपने उनमें से दो को किया और तीसरे को छोड़ने पर आपके द्वारा देखे गए व्यवहार का परिणाम होगा। तीसरा चरण आपके लिए एक संपादन नियंत्रण जोड़ना है IDD_NOTEBOOKS_DIALOG पहचानकर्ता के साथ IDC_EDIT1 संसाधन फ़ाइल में. यह आमतौर पर संसाधन संपादक के साथ किया जाता है लेकिन यदि आप चाहें तो इसे मैन्युअल रूप से भी किया जा सकता है।

एफडब्ल्यूआईडब्ल्यू, मैंने एमएफसी के साथ काफी लंबे समय तक काम किया है और आखिरकार मुझे हेडर फाइलों में कभी भी डायलॉग क्लास डिक्लेरेशन न डालने की आदत हो गई क्योंकि यह अनावश्यक है। उचित इंटरफ़ेस के साथ, डायलॉग के कार्यान्वयन के विवरण को जानने के लिए डायलॉग के अलावा किसी अन्य चीज़ की आवश्यकता नहीं होती है। इसकी कुंजी इंटरफ़ेस है. एक विशिष्ट इंटरफ़ेस जो मैं लिखूंगा वह कुछ इस तरह होगा:

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

उस फ़ंक्शन का कार्यान्वयन संवाद के कोड के साथ होगा और डेटा के साथ नियंत्रण प्रारंभ करेगा और फिर, यदि OK क्लिक करने पर यह संवाद से डेटा निकालता है और सत्य लौटाता है। आमतौर पर मेरे पास एक होता Edit विधि में NotebookData क्लास और उसका कार्यान्वयन दिखाए गए फ़ंक्शन को कॉल करेगा। मैंने इसे बहुत साफ-सुथरा और उपयोग में आसान अभ्यास पाया है। इसमें एक चेतावनी यह है कि डायलॉग कोड को उस डेटा के बारे में जानना होगा जो वह प्रदर्शित कर रहा है, लेकिन मेरा मानना ​​है कि यह एक निष्पक्ष और उचित समझौता है।

コメント

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