Cách này thường được thực hiện trong MFC là xác định mẫu hộp thoại trong trình chỉnh sửa tài nguyên (như bạn đã làm), sau đó trong C++ lấy một lớp từ CDialog và liên kết nó với mẫu hộp thoại bạn đã làm - nó không hoàn toàn rõ ràng).
Điều gì thực sự liên kết hai là hàm tạo cho mã CDialog của bạn. Nếu bạn nhìn vào hộp thoại related code tự động tạo ra bởi các thuật sĩ lớp MFC, bạn sẽ nhìn thấy trong một cái gì đó thực hiện xây dựng như thế này:
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent)
nơi CMyDlg :: IDD được định nghĩa là một điều tra với một giá trị của bạn mẫu nhận dạng của mẫu hộp thoại mới. Điều này khiến mọi chuyện xảy ra, không phải là tuyên bố của enum. Bạn có thể sửa đổi nó để
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent)
và nó sẽ vẫn làm việc (giả sử IDD_NEW_DIALOG là mẫu id của hộp thoại của bạn trong các nguồn lực), như tất cả những gì đang xảy ra là id thoại đã được chuyển vào constructor. Nói chung, nó luôn luôn đáng ghi nhớ rằng, mặc dù xuất hiện ban đầu, MFC không ràng buộc với Windows thông qua bit của phép thuật trình biên dịch - tất cả được thực hiện với C + + và một vài macro.
EDIT: DIALOGEX và DIALOG khai báo các định dạng tài nguyên hộp thoại hơi khác biệt mà Windows hiểu được: định dạng cũ hơn phiên bản mới hơn. Tuy nhiên cả hai đã có khoảng từ ít nhất Windows 95, vì vậy nó không phải là một sự khác biệt rất đáng kể.
Cảm ơn bạn đã trả lời. Tôi lấy được lớp từ một lớp cơ sở có nguồn gốc từ CDialog. Vì vậy, tôi đoán điều này sẽ chăm sóc của các công cụ. – Raghu