2008-12-08 27 views
8

Tôi đã xác định một hộp thoại mới và các điều khiển của nó trong một tệp tài nguyên đã tồn tại. Tôi cũng đã tạo một tệp mới sẽ xử lý các sự kiện được tạo từ hộp thoại này. Nhưng tôi không chắc chắn làm thế nào để kết nối hai.MFC> Kết nối một hộp thoại với một hộp thoại

Có phải câu lệnh enum { IDD=IDD_NEW_DIALOG }; tất cả những gì cần thiết để kết nối cả hai? Hoặc chúng ta nên thêm một số tuyên bố khác?

Trả lời

14

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ể.

+0

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

0

Sử dụng trình hướng dẫn lớp để tạo lớp cho hộp thoại mới được tạo. ctrl + w là phím tắt từ chế độ xem tài nguyên giao diện người dùng.

1

Đó là tất cả những gì cần thiết khi bạn tạo hộp thoại qua lớp hộp thoại (DoModal() hoặc Create cho hộp thoại không theo phương thức), đây là cách thông thường để thực hiện.

Bạn tất nhiên cần phải kế thừa từ CDialog và thêm bản đồ thư để định tuyến thư đến các hàm xử lý ewvent của bạn.

Các vấn đề liên quan