LIÊN KẾT GIỮA DIALOG VAØ CÁC THAØNH PHẦN KHÁC:

Một phần của tài liệu Lập trình Windows với MFC Microsoft Visual C++ 6.0 pdf (Trang 61 - 62)

Hộp hội thoạ

9.4 LIÊN KẾT GIỮA DIALOG VAØ CÁC THAØNH PHẦN KHÁC:

Dialog là công cụ giao diện rất tiện lợi với người dùng. Tạo mối liên kết giữa dialog và các thành phần khác của ứng dụng để trao đổi thông tin từ người dùng là vấn đề thường gặp. Vấn đề này có thể giải quyết như sau:

ƒ Đối tượng nhận thông tin sẽ chuyển con trỏ (handle) quản lý mình cho đối tượng cung cấp thông tin.

Hộp hội thoại 105

ƒ Đối tượng cung cấp thông tin sẽ dùng handle của đối tượng nhận tin để xác định các ô chứa tin của đối tượng này, sau đó điền các thông tin của mình vào các ô chứa tin của đối tượng nhận tin.

2 Thực hành: Tạo ứng dụng VD26 như VD25. Thực hiện các bổ sung: Khi option dialog hoạt động, người dùng gõ thông tin vào hộp nhập. Nếu người dùng chọn OK thì thông tin nhập chuyển vào hộp nhập YourName trên cửa số chính, ngược lại mục chọn Cancel sẽ không xử lý gì cả.

HD: Mục nhập YourName được quản lý bởi thuộc tính m_editName của đối tượng CEmpWnd, đây là ô chứa tin của đối tượng nhận tin CEmpWnd. Đối tượng COptionDlg là đối tượng cung cấp tin. Xử lý điền thông tin chỉ xảy ra khi người dùng chọn OK. Xử lý này được cài đặt trong hành vi mà đối tượng COptionDlg dùng để trả lời thao tác click trên nút OK.

Các bước thực hiện dự án VD26:

ƒ Tạo dự án VD26 tương tự dự án VD25.

ƒ Hành vi thực hiện OptionDlg trong CEmpWnd sử dụng dùng con trỏ chỉ đến nó làm tham số cho hành vi tạo lập của đối tượng COptionDlg: void CEmpWnd::OnGameOption ()

{

COptionDlg dlg( this ); dlg.DoModal(); }

ƒ Bổ sung thuộc tính protected m_parent kiểu con trỏ CEmpWnd* cho lớp COptionDlg. Thuộc tính này được dùng để chứa con trỏ đến cửa sổ cha của COptionDlg (CEmpWnd). Bổ sung #include "EmpWnd.h" vào đầu tập tin khai báo (.h) của lớp COptionDlg.

ƒ Hành vi tạo lập của COptionDlg lưu giữ giá trị con trỏ cửa sổ cha được truyền cho nó vào thuộc tính m_parent.

COptionDlg::COptionDlg ( CWnd* pParent )

: CDialog( COptionDlg::IDD, pParent ) {

m_parent = (CEmpWnd*) pParent; //{{AFX_DATA_INIT(COptionDlg)

// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT

}

106 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com

ƒ Hành vi xử lý chọn nút OK của lớp COptionDlg: Thực hiện việc lấy thông tin từ hộp nhập của nó để gán cho đối tượng hộp nhập m_editName trên cửa sổ cha CEmpWnd.

void COptionDlg::OnOK() {

CString name;

// Lấy thông tin nhập trong hộp nhập của dialog GetDlgItemText( IDC_NAME, name );

// và chuyển thông tin này sang hộp nhập trên cửa số chính m_parent->m_editName.SetWindowText( name ); // Dùng hành vi lớp cơ sở để kết thúc dialog.

CDialog::OnOK(); }

) Hành vi OnOK của lớp COptionDlg bị lỗi do truy xuất thuộc tính kiểu protected m_editName của lớp CEmpWnd. Để khắc phục lỗi này, ta khai báo lớp COptionDlg là một lớp bạn (friend) của lớp CEmpWnd. class CEmpWnd : public CWnd

{

friend class COptionDlg; // COptionDlg is a friend public:

CEmpWnd();

... // other declarations

} ;

Một phần của tài liệu Lập trình Windows với MFC Microsoft Visual C++ 6.0 pdf (Trang 61 - 62)

Tải bản đầy đủ (PDF)

(120 trang)