[ad_1]
Halo! Butuh bantuan – Saya punya proyek MS VC++ 6; jadi saya hanya mencoba menambahkan kontrol EDIT ke salah satu jendela modal saya (IDC_EDIT1), variabel m_Edit1 (CEdit) dan bahkan setelah itu tidak mungkin untuk membuka jendela tersebut. Aplikasi mogok dengan kesalahan “Pelanggaran akses” – NTDLL.DLL (0xC0000005). Jika saya menghapus variabel ini melalui Class Wizard – semuanya baik-baik saja lagi. Dan saya menemukan masalah ini di setiap jendela – bahkan di formulir utama. Apa artinya? Terima kasih atas dukungannya.
Apa yang saya coba:
berkas tajuk:
// Dialog Data //{{AFX_DATA(CNotebooksDlg) enum { IDD = IDD_NOTEBOOKS_DIALOG }; CEdit m_Edit1; CComboBox m_ComboSerial; CComboBox m_ComboDeviceType; CSortListCtrl m_ctrlListHistory;
berkas 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);
Solusi 1
Anda perlu menelepon m_Edit.create( style, rect, parent, ID)
sebelum Anda dapat menggunakan objek CEdit.
Solusi 2
Ada tiga langkah untuk membuat kontrol dalam dialog berfungsi dengan program MFC. Anda melakukan dua di antaranya dan menghilangkan yang ketiga akan menghasilkan perilaku yang Anda amati. Langkah ketiga adalah menambahkan kontrol edit ke IDD_NOTEBOOKS_DIALOG
dengan pengenalnya IDC_EDIT1
dalam file sumber daya. Hal ini biasanya dilakukan dengan editor sumber daya tetapi dapat dilakukan secara manual jika Anda mau.
FWIW, saya sudah lama bekerja dengan MFC dan akhirnya saya terbiasa tidak pernah meletakkan deklarasi kelas dialog di file header karena itu tidak diperlukan. Dengan antarmuka yang tepat, tidak ada hal lain yang perlu mengetahui detail implementasi dialog kecuali dialog itu sendiri. Kuncinya adalah antarmuka. Antarmuka tipikal yang akan saya tulis akan seperti ini:
bool OpenNotebookDlg( CWnd * pparent, NotebookData & data );
Implementasi fungsi tersebut akan dilakukan dengan kode dialog dan akan menginisialisasi kontrol dengan data dan kemudian, jika OK
diklik, ia mengekstrak data dari dialog dan mengembalikan nilai true. Biasanya saya akan memiliki Edit
metode di NotebookData
kelas dan implementasinya akan memanggil fungsi yang ditampilkan. Saya telah menemukan ini sebagai praktik yang sangat bersih dan mudah digunakan. Satu-satunya peringatan adalah kode dialog harus mengetahui data yang ditampilkannya, tetapi saya menganggap itu sebagai trade-off yang adil dan pantas.
[ad_2]
コメント