ĐỀ TÀI TÌM HIỂU VỀ MFC VÀ XÂY DỰNG ỨNG DỤNG ĐỀ TÀI TÌM HIỂU VỀ MFC VÀ XÂY DỰNG ỨNG DỤNG SỬ DỤNG MFC Nhóm thực hiện Nhóm 6 DANH SÁCH NHÓM 6 1 Trần Thị Hường (NT) 2 Nguyễn Thị Huyên 3 Dương Hiền Huyền 4[.]
ĐỀ TÀI: TÌM HIỂU VỀ MFC VÀ XÂY DỰNG ỨNG DỤNG SỬ DỤNG MFC Nhóm thực hiện: Nhóm 6 DANH SÁCH NHÓM Trần Thị Hường (NT) Nguyễn Thị Huyên Dương Hiền Huyền Hà Thị Thu Huyền Vũ Thị Liên (TK) Vũ Thị Lan Doãn Thị Loan Trần Thanh Long Trần Thị Nhật Linh h A- MỞ ĐẦU Ngôn ngữ lập trình C++ biết đến ngơn ngữ lập trình mạnh nhờ khả việc triển khai phần mềm mức độ khác nhau, từ mức hệ thống đến mức ứng dụng, từ lập trình cấu trúc đến lập trình hướng đối tượng, từ lập trình dựa thuật giải đến lập trình trí tuệ nhân tạo, từ lập trình sở liệu đến lập trình sở tri thức…Bất đâu, mà người lập trình muốn thể ý tưởng khoa học nghệ thuật máy tính C++ điều nghĩ đến Và, theo đó, vấn đề cài đặt mơi trường cho ứng dụng điều phải quan tâm.Với xu hướng sử dụng hệ điều hành Microsoft Windows nay, nên nghĩ đến việc cài đặt ứng dụng mơi trường khai thác cho ứng dụng hoạt động hiệu Microsoft Visual C++ , sản phẩm Microsoft với khả biên dịch ưu việt lối khai thác hệ thống rộng mở nhờ tập hợp lớp thư viện MFC có đầy đủ tiện ích xứng đáng lựa chọn bạn Sau tìm hiểu MFC xây dựng ứng dụng đơn giản sử dụng ứng dụng Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h B – NỘI DUNG I ) TÌM HIỂU VỀ MFC (microsoft foundation class) Khái quát MFC 1.1 Khái niệm MFC thư viện Microsoft, bao gồm lớp bản, cài đặt ngôn ngữ C++ hỗ trợ việc lập trình mơi trường Windows Từ lớp này, MFC xác lập tảng hình thành ứng dụng Windows, bao gồm việc định nghĩa khung ứng dụng, công cụ chuẩn phổ biến để bổ sung vào khung nói nhằm tạo ứng dụng hồn chỉnh Với MFC, cơng việc người lập trình cịn lựa chọn thành phần cần thiết, điều chỉnh phối hợp chúng hợp lý để có ứng dụng kết mong muốn 1.2 Một số lớp 1.2.1.Lớp quản lý tiểu trình CwinThread CwinThread lớp MFC, lớp đối tượng quản lý tiểu trình tạo tiến trình ứng dụng thực Các dịch vụ phục vụ cho quản lý tiểu trình CwinThread cung cấp thơng qua thuộc tính hành vi DWORD m_ nThread ID:thuộc tính lưu số hiệu tiểu trình CWND m_pMain Wnd: Lưu trỏ đối tượng cửa sổ giao diện tiểu trình Khi cửa sổ giao diện chấm dứt hoạt động, tiểu trình liên quan kết thúc Nếu tiểu trình thuộc loại tiểu trình xử lý nội giá trị kế thừa từ tiểu trình giao diện cấp cao CwinThread(): Hành vi tạo lập đối tượng tiểu trình Vitual BOOL initinstance(): Khởi tạo thơng số cho đối tượng tiểu trình đảm nhận xử lý bổ sung khác ứng dụng Đối với tiểu trình giao diện, hành vi dùng để khởi tạo đối tượng cửa sổ giao diện gán địa đối tượng cửa sổ cho m_pMain Wnd Virtual int Exitinstance(): Hành vi kết thúc đối tượng tiểu trình Thơng qua hành vi này, đối tượng quản lý tiểu trình thực hoàn trả tài nguyên hệ thống mà đăng ký sử dụng Virtual int Run(): Hành vi dành riêng cho tiểu trình giao diện, thực vòng lặp nhận message,chuyển message cho hành vi PreTranslateMessage lớp Nếu hành vi trả giá trị message tiếp tục chuyển đến hàm diễn dịch phím translateMessage hàm điều phối message Dispatch Message Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h Virtual BOOL preTranslateMessage: Hành vi cho phép can thiệp trước message nhận từ message queue ứng dụng.Thơng qua đó, tiểu trình giao diện thực tiền xử lý message đặc trưng nhằm đáp ứng yêu cầu đặt cho ứng dụng 1.2.2 Lớp quản lý tiểu trình giao diện CWinApp CwinApp, kế thừa từ CwinThread, lớp đối tượng chuyên dùng quản lý tiểu trình giao diện ứng dụng.Ứng dụng Windows phép sử dụng đối tượng thuộc lớp Ngồi thuộc tính, hành vi kế thừa public từ CwinThread, CwinApp có thuộc tính hành vi bổ sung sau : Const char* m_pszAppName : Lưu chuỗi tên ứng dụng LPTSTR m_lpcmdLine : Lưu nội dung chuỗi tham số dòng lệnh Tham số dòng lệnh toàn phần nội dung mà người dùng gõ vào sau chuỗi đường dẫn tên chương trình ứng dụng họ thực ứng dụng.Đối với ứng dụng có nhiều chế độ hoạt động khác việc sử dụng tham số dòng lệnh chế xác lập giao ước ứng dụng người dùng để chọn chế độ sử dụng ứng dụng thích hợp Int m_nCmdShow : Lưu giá trị thơng số dùng để kích hoạt cửa sổ giao diện ứng dụng CwinApp() : Tạo lập đối tượng tiểu trình Hành vi hiển thị hộp thơng báo chờ nhận ý kiến người dùng : Virtual int DomessageBox { LPCT STR lpsz prompt// nội dung thông báo UINT nType // Dạng hộp thông báo UINT hlpindex = // Số hiệu mục giúp đỡ( Win help) } Hành vi kích hoạt với tham số tương ứng chương trình sử dụng hàm AfxMessageBox để hiển thị hộp thông báo nType //ấn định dạng hộp thông báo Giá trị kết hợp thông số qui định biểu tượng hiển thị nút chọn bố trí hộp H/vi DoMessageBox chờ người sử dụng trả lời cách chọn nút chọn xác định hộp thông báo Hành vi kết thúc với giá trị trả số hiệu nút chọn.Kế thừa hành vi để chặn thực xử lý đặc trưng cho tất lời gọi AfxMessageBox ứng dụng Hàm AfxMessageBox sử dụng DoMessageBox để hiển thị hộp thông báo lấy giá trị hành vi làm kết trả 1.2.3 Một số lớp thường dùng - Lớp CWnd : Đây lớp đối tượng quản lý cửa sổ Windows Thơng qua thuộc tính hành vi lớp CWnd, MFC cung cấp dịch vụ cần thiết cho phép tạo lập khai thác tính cửa sổ Windows cách dễ dàng Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h - Lớp Cmenu: lớp quản lý Menu thơng qua thuộc tính hành vi đặc trưng - Các lớp đối tượng nhập liệu: Lớp đối tượng nhập liệu, kế thừa từ lớp CWnd, cho phép quản lý mục nhập liệu cửa sổ giao diện + Cstatic: Lớp đối tượng quản lý mục thông báo ảnh cửa sổ giao diện + Cedit: Lớp đối tượng quản lý hộp nhập cửa sổ giao diện.Ngoài việc hỗ trợ xử lý hoạt động nhập liệu, Cedit cịn có khả thông tin cho cửa sổ cha hộp nhập tình hình nhập liệu diễn hộp + Cbutton: Lớp đối tượng quản lý nút chọn cửa sổ giao diện.Trong Windows, nút chọn hoạt động độc lập hay theo nhóm + Lớp đối tượng quản lý hộp nhập chứa danh sách mục chọn cửa sổ giao diện Tùy theo loại ListBox mà sử dụng, người dùng phép đánh dấu chọn nhiều mục ListBox - Lớp quản lý hộp hội thoại Cdialog: Là lớp đồi tượng kế thừa từ lớp Cwnd, sử dụng để quản lý dialog Lập trình Windows với MFC 2.1 Khái quát lập trình Windows với MFC Lập trình Windows với MFC kỹ thuật lập trình sử dụng thư viện MFC Microsoft để xây dựng ứng dụng windows( windows app) ứng dụng khác DLL, COM,ActiveX Bản chất việc lập trình làm việc với C++ thông qua lớp đối tượng Kỹ thuật lập trình có số ưu nhược điểm sau: Ưu điểm: + Bản chất lập trình hướng đối tượng với C++ + Người lập trình đỡ phải nhớ nhiều hàm cấu trúc chúng gói chung vào lớp + Thời gian phát triển ứng dụng nhanh hỗ trợ Wizard với Visual studio Nhược điểm: + Chương trình biên dịch lớn cỡ độ từ vài MB đến vài chục MB tùy vào chế độ biên dịch static link ( đưa toàn vào exe dll nhất) chế độ Dynamic linked ( bắt đính kèm tệp dll MFC) + Vẫn phải đính kèm tệp tin visual C++ msvcrtX.dll msvcppX.dll ( tùy phiên VC++) Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h + Đối với ứng dụng MFC lớn, việc làm giảm tốc độ ứng dụng so với việc xây dựng ứng dụng APIs tránh khỏi, lớp bao MFC rườm rà phức tạp 2.2 Mơi trường lập trình MS Visual C++ Mơi trường lập trình Microsoft Visual C++ bao gồm: - Miền làm việc Khi khởi động lần đầu tiên, vùng bên trái Developer studion gọi miền làm việc, vùng để điều hành phần khác dự án phát triển(project) Miền làm việc cho phép xem phần ứng dụng theo ba cách khác nhau( hình đây) Class View: cho phép điều hành thao tác mã nguồn mức lớp C++ Resource View: cho phép tìm chọn lọc tài nguyên khác ứng dụng thiết kế cửa sổ hội thoại, biểu tượng, menu, toolbar… Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h File View: cho phép xem điều hành tất file ứng dụng - Cửa sổ xuất ( output pane) Cửa sổ nằm phần cửa sổ ứng dụng Visual C++, thường khơng hình khởi động ứng dụng Visual C++ lần mà xuất sau thực biên dịch ứng dụng lần Phần sổ nơi cung cấp tất thông tin cần thiết cho người dùng câu lệnh, lời cảnh báo thơng báo lỗi trình biên dịch, đồng thời nơi chương trình gỡ rối hiển thị tất biến với giá trị hành thời gian thực thi mã nguồn Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h - Vùng soạn thảo: Đây vùng bên phải môi trường để người dùng thực tất thao tấc soạn thảo chương trình sử dụng Visual C++, nơi cửa sổ soạn thảo chương trình hiển thị, đồng thời nơi cửa sổ vẽ hiển thị người dùng thiết kế hộp thoại - Thanh thực đơn ( menu): Lần chạy Visual C++, có ba cơng cụ hiển thị menu ( menu Bar) Trong Visual C++ có sẵn nhiều cơng cụ khác nhau, người dùng tùy biến tạo cơng cụ phù hợp cho riêng Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h - Thanh công cụ: 2.3 Tạo ứng dụng với MS Visual C++ Từ menu File, người dùng chọn lệnh New để tạo dự án( Project), tập tin( File) hay không gian làm việc( Workspace) hộp thoại xuất hình sau: Để tạo ứng dụng dạng hộp thoại dialog, người dùng cần làm sau: Bước khởi đầu: Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h - Bước 1: - Bước 2: Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 10 II XÂY DỰNG ỨNG DỤNG SỬ DỤNG MFC Xây dựng ứng dụng nhập liệu hiển thị kết quản hộp soạn thảo EDIT BOX 2.1.Giới thiệu Hầu hết ứng dụng dùng có nhiều tình u cầu bạn nhập liệu hiển thị kết hình Sau nhóm chúng tơi xin giới thiệu ứng dụng nhập liệu hiển thị kết hộp soạn thảo Edit Box Để thực ứng dụng cần hiểu khái niệm: - Static text: Là điều khiển dùng để thơng báo dịng văn giao diện chương trình Bạn thay đổi văn tĩnh mã lệnh chương trình - Edit Box: Hộp soạn thảo văn cho phép người sử dụng nhập liệu vào hiển thị liệu hình - Nút điều khiển Radio sử dụng để chọn lựa chọn Thông thường nút Radio đặt Group Box - Hộp nhóm Group Box sử dụng để trang trí, khung viền ngồi Static text Để xây dựng ứng dụng phải tiến hành qua bước sau đây: - Thiết kế giao diện( Interface) - Viết mã lệnh 2.2 Ứng dụng nhập liệu hiển thị kết hộp soạn thảo Edit Box 2.2.1 Thiết kế giao diện Thiết kế chương trình Area để có giao diện hình Trong có ba hộp soạn thảo Edit Box, hai nút Command Button, bốn dòng Static Text, Group Box hai nút Radio Button Khi kích vào nút Rectangle, chương trình cho phép bạn nhập vào chiều dài chiều rộng hình chữ nhật hình Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 12 - Khi kích vào nút Circle chương trình cho phép bạn nhập bán kính đường trịn hình - Để hiển thị kết tính diện tích, bạn ấn vào nút Display - Kích vào nút Clear để xóa liệu Edit Box - Nút Exit để chương trình 2.2.2 Viết mã lệnh Các hàm sử dụng để viết mã lệnh cho ứng dụng - Hàm UpdateData ( tham_ số) với : Tham_ số TRUE: hàm thực việc cập nhật liệu điều khiển vào biến liên kết tương ứng Tham_ số FALSE: hàm thực việc cập nhật liệu từ biến liên kết vào điều khiển tương ứng hiển thị giao diện chương trình Cặp mã lệnh UpdateDate(TRUE) UpdateData(FALSE) quan trọng Visual C++ Nó có tác dụng cặp mã lệnh Cin>> CoutLoadIcon(IDR_MAINFRAME); } void CAreaDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAreaDlg) DDX_Control(pDX, IDC_STATIC_WIDTH, m_staWidth); DDX_Control(pDX, IDC_STATIC_LENGTH, m_staLength); DDX_Control(pDX, IDC_EDIT_WIDTH, m_ediWidth); DDX_Control(pDX, IDC_EDIT_LENGTH, m_ediLength); DDX_Text(pDX, IDC_EDIT_LENGTH, m_dLength); DDX_Text(pDX, IDC_EDIT_WIDTH, m_dWidth); DDX_Text(pDX, IDC_EDIT_AREA, m_dArea); DDX_Radio(pDX, IDC_RADIO_RECT, m_sel); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAreaDlg, CDialog) //{{AFX_MSG_MAP(CAreaDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_RADIO_RECT, OnRadioRect) ON_BN_CLICKED(IDC_RADIO_CIRCLE, OnRadioCircle) ON_BN_CLICKED(IDC_BUTTON_DISPLAY, OnButtonDisplay) ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit) ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAreaDlg message handlers BOOL CAreaDlg::OnInitDialog() Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 16 { CDialog::OnInitDialog(); // Add "About " menu item to system menu // IDM_ABOUTBOX must be in the system command range ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_sel=0;//gan bien dieu khien ve UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control } void CAreaDlg::OnSysCommand(UINT nID, LPARAM lParam) Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 17 { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon For MFC applications using the document/view model, // this is automatically done for you by the framework void CAreaDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, dc.GetSafeHdc(), 0); (WPARAM) // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 18 } // The system calls this to obtain the cursor to display while the user drags // the minimized window HCURSOR CAreaDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CAreaDlg::OnRadioRect() { // TODO: Add your control notification handler code here //hien thi van ban tinh static length this->m_staLength.ShowWindow(SW_SHOW); // hien thi hop soan thao Edit length; this->m_ediLength.ShowWindow(SW_SHOW); //dat ten cho ban ban ting IDC_STATIC_WIDTH la width this->m_staWidth.SetWindowText("Width"); } void CAreaDlg::OnRadioCircle() { // TODO: Add your control notification handler code here //an van ban tinh static length this->m_staLength.ShowWindow(SW_HIDE); // an hop soan thao Edit length; this->m_ediLength.ShowWindow(SW_HIDE); //dat ten cho ban ban ting IDC_STATIC_WIDTH la width this->m_staWidth.SetWindowText("Radius"); } void CAreaDlg::OnButtonDisplay() Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 19 { // TODO: Add your control notification handler code here //cap nhat cac bien tu man hinh vao chuong trinh UpdateData(TRUE); //kiem tra cac radio switch(this->m_sel) { //neu nut rectangle duoc lua tron case 0: //tinh dien tich hinh chu nhat this->m_dArea=this->m_dLength*this->m_dWidth; break; //neu nut circle duoc tron thi tinh dien tich hinh tron case 1: this->m_dArea=this->m_dWidth*3.1415; break; //cap nhat cac bien man hinh } UpdateData(FALSE); } void CAreaDlg::OnButtonExit() { // TODO: Add your control notification handler code here this->OnOK(); } void CAreaDlg::OnButtonClear() { // TODO: Add your control notification handler code here this->m_dArea=0; this->m_dLength=0; this->m_dWidth=0; Nhóm 6- Lớp 1202INFO1311Tìm hiểu MFC xây dựng ứng dụng sử dụng MFC h 20