-
09-07-2010, 03:31 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Làm quen với lập trình MFC - VS2008
MFC là Microsoft Foundation Classes bộ thư viện được Microsoft phát triển cho việc develope nhanh ứng dụng trên Windows bằng môi trường Visual C++. Ngày nay trên môi trường Visual C++ (VS200X,VS2010) cho ta 3 lựa chọn để phát triển ứng dụng như sau:
1.Lập trình Win32API:
Bản chất là lập trình với ngôn ngữ lập trình C và tương tác gọi các hàm API
do hệ điều hành Windows cung cấp.
Tuy nhiên bạn vẫn có thể trộn lẫn C++ vô:
Ưu điểm : + Code bằng C (không biết có nên cho vào ưu điểm ko nữa)
+ Mã sinh ra nhỏ gọn chạy nhanh và ko bị phụ thuộc vào các tập
tin DLL.
Nhược điểm:
+ Khó nhớ các hàm, tên hàm, các cấu trúc liên quan đến một
mảng thành phần nào đó mà ta cần sử dụng.
+ Vì thế thời gian develop một ứng dụng khá lâu.
+ Vì là lập trình C nên mã nguồn thường khó quản lý hơn, nhất là
với những bạn có phong cách lập trình không được tốt.
2.Lập trình C++.NET:
Bản chất là lập trình với bộ thư viện .NET của MS cung cấp, sử dụng với cú
pháp của C++.
Ưu điểm : + Hướng đối tượng với các thành phần của .NET sử dụng dễ dàng
nhanh chóng.
+ Cho phép trộn lẫn mã manged và unmagned. M$ hỗ trợ .NET
cho VC++ với mục đích là cho phép bạn từng bước chuyển các
ứng dụng cũ viết bằng C++ lên dần dần môi trường .NET, bởi
trước đó có khá nhiều ứng dụng mà các thành phần của nó
được viết bởi native C++.
Nhược điểm:
+ Yêu cần phải kèm theo bộ Microsoft .NET Framework cồng kềnh
để cài đặt và chạy trên máy client.
+ Nếu sử dụng lẫn lộn mã hoặc thành phần nào đó của native C++
và managed C++ nên khó quản lý và bảo trì.
+ Hỗ trợ về .NET không bằng C# được.Vì C# được thiết kế là ngôn
ngữ lập trình chính với nên .NET.
3.Lập trình MFC:
Bản chất là làm việc với C++ thông qua các lớp và đối tượng. Các lớp bao
gồm các hàm và cấu trúc của Win32API về một thành phần nào đó được
gói chung vào một lớp.
Ưu điểm: + Lập trình hướng đối tượng với C++
+ Đỡ phải nhớ nhiều hàm và cấu trúc bởi chúng gói chung vào hầu
hết một lớp.
+ Thời gian develope một ứng dụng sẽ nhanh hơn bởi sự hỗ trợ rất
tốt của bộ Wizard với Visual Studio.
Nhược điểm :
+ Chương trình khi biên dịch ra sẽ khá lớn cỡ độ từ vài MB đến vài
chục MB có khi hoặc hơn tùy vào chế độ biên dịch Static Link
(đưa toàn bộ vào một exe hoặc dll duy nhất) hoặc chế độ
Dynamic Linked (bắt đính kèm mấy tệp dll của MFC).
+ Chắc chắn vẫn phải đính kèm mấy tệp của Visual C++ như
msvcrtX.dll và msvcppX.dll (X tùy phiên bản VC++).
+ Tuy nhiên là vẫn phát triển ứng dụng nhanh hơn Win32API
đồng thời lại không quá cồng kềnh như .NET
P/S: Bài tiếp theo chúng ta sẽ bắt đầu với ứng dụng đơn giản nhất của MFC- Dialog Based Application.View more random threads:
- Phần mềm 4Gb patch cho 32bit App. How Do They Do It?
- Một số kĩ thuật cơ bản với Irrlicht
- Ogre, Lập trình game với Ogre graphic engine
- Tiệm Sửa Chữa PC Tại Nhà quận mười Uy Tín
- Hướng dẫn làm game bằng C/C++
- Công Ty Sửa Vi Tính Tận Nơi quận mười Chất Lượng
- Image Rotation! Kỹ thuật xoay ảnh
- Chỗ Nào Sửa Chữa PC Ưu Đãi Tại Nhà Quận 10
- [Dịch] So sánh sự tối ưu compile giữa VC++ 2010 và DEV C++
- Hướng dẫn khắc phục lỗi không tìm thấy MSVCR80D.dll
-
09-07-2010, 04:12 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bước 1 : Khởi động VC++
Bước 2 : Tạo project MFC Application mới
Sau khi Wizard của MFC hoàn thành bạn thu được giao diện đơn giản sau
Bước 3 : Sử dụng ToolBox kéo một Static Text và một EditBox vào Dialog
Để đặt thuộc tính cho công cụ điều khiển trên Dialog bạn sử dụng của sổ Property View có thể tìm trong thực đơn
View->Other Windows -> Properties Windows hoặc phím tắt Alt + Enter
Static Text: Bạn đặt Caption
Caption = "Enter text here to set caption of Dialog"
Bước 4 : Viết đáp ứng sự kiện chuột cho nút OK để đổi caption của Dialog thành nội dung mà ta đặt trong text box
Sau đó tìm đến hàm void CDialogDlg::OnBnClickedOk() trong file DialogDlg.cpp
Sử dụng Class View để tìm nhanh ra hàm OnBnClickedOk() trong lớp CDialogDlg
bằng cách nhấn đúp vào tên hàm trong cửa sổ Class View.
Và ta hoàn thành đoạn code như sau
Mã:void CDialogDlg::OnBnClickedOk(){ // TODO: Add your control notification handler code here /* Đây là mã mà VC++ tự thêm cho bạn để xử lý sự kiện khi bạn nhấn lên nút OK để cập nhật nôi dung trong TextBox lên caption của Dialog Ở trên bạn đã kéo từ ToolBox vào một TextBox có ID là IDC_EDIT1. */ //Lấy nội dung từ EditBox có IDC là IDC_EDIT1 CString content; //Biến lưu nội dung EditBox /*Trong MFC EditBox control được cài đặt một lớp tương ứng là CEdit dùng để điều khiển control EditBox Hàm GetDlgItem(UINT nID): Trả về một con trỏ dạng CWnd là lớp cơ sở của mọi Control trên Dialog kể cả EditBox của ta. */ CEdit *pEditBox=(CEdit*)GetDlgItem(IDC_EDIT1); //Lấy Text từ trên EditBox thông qua contrỏ pEditBox pEditBox->GetWindowTextW(content); //Cập nhật lên title bar this->SetWindowTextW(content); //OnOK();}
-
11-07-2010, 06:15 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Trong MFC khi bạn thiết kế một Dialog với một control chắc chắn có 2 vấn đề bạn muốn quan tâm tới control đó trên Dialog:
1. Thường là chỉ quan tâm đến dữ liệu được lưu trên Control đó là gì.
2. Dữ liệu được nhập có hợp lệ hay không
3. Bạn có nhu cầu điều khiển control đó hay không? (Ví đụ thay font cho Control, hoặc đi chuyển control đến vị trí khác )
MFC cung cấp cho bạn cơ chế DDX - Dialog Data Exchange giúp bạn kết nối một Control trên Dialog thông qua ID của nó với một biến và thông qua biến này ta thao tác với nó dễ dàng để lấy hoặc là cập nhật dữ liệu lên Control tương ứng.
Ngoài ra để đảm bảo tính đúng đắn của dữ liệu - ví dụ bạn có textbox chỉ cho phép user nhập số nếu user nhập sai thì sẽ đưa ra thông báo. Cơ chế này được MFC hỗ trợ sẵn thông qua DDV - Dialog Data Validation nhằm đảm bảo việc bạn đưa từ Control vào biến lại là hợp lệ.
Hàm liên quan :
UpdateData(BOOL SaveAndValidate);
Khi gọi UpdateData(TRUE) - Đưa dữ liệu từ mọi control vào biến thành phần tương ứng kết nối với nó:
+ Trước tiên MFC sẽ kiểm tra tính hợp lệ của dữ liệu trên công cụ điều khiển
nếu sai đưa ra thông báo lỗi.
+ Nếu dữ liệu đã hợp lệ thì việc chuyển dữ liệu từ Control -> Biến được thực
hiện và bạn có được dữ liệu hiển thị trên Control hiện đã được lưu trong
biến.
Khi gọi UpdateData(FALSE) - Là thao tác ngược lại đư dữ liệu từ biến lên Control.
Bước 1: Tạo project MFC Dialog Based lấy tên Solution là SimplCalc
Bước 2: Sử dụng ToolBox thiết kế lại giao diện chương trình đồng thời
đặt các ID cho các công cụ điều khiển trên Dialog như trên hình
Bước 3: Tạo kết nối từ Control <-> Biến sử dụng ClassWizard. Bạn đang sử dụng DDX và DDV trong MFC chính là ở đây.
Bước 4: Xây dựng bắt sự kiện khi nút + được bấm. Các nút còn lại bạn xây dựng tương tự
PS: Lession 3 Sử dụng Basic of ListBox, ComboxBox Control, CheckBox Control
-
04-12-2010, 01:29 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Trong MFC Listbox control là một công cụ điều khiển giúp bạn biểu diễn dữ liệu dạng danh sách. Vì ở mục trước mình đã hướng dẫn một vài thao tác bằng hình ảnh rùi, nên từ bài này trở đi phần hình ảnh của design Dialog theo từng bước nếu thực sự cần thiết mình sẽ thêm vào.
Bước 1: Tạo một MFC Dialogbase application type.
Bước 2: Bạn thiết kế giao diện như hình vẽ gồm 1 Label (Static), một TextBox (Edit Control), một Listbox (Listbox Control) và 4 Button. Tất cả bạn đều có thể
tìm thấy trong ListBox
Bước 3: Tạo một biến Value (CString) kết nối với EditBox đặt tên là m_txtEdit, bạn tạo tiếp một biến Control kết nối với ListBox đặt tên là m_wndListBox.
Bước 4: Thiết kế chương trình với mục đích như sau.
Sử dụng Listbox để lưu một danh sách các xâu nhập vào từ EditBox, trong đó thực hiện các thao tác Thêm (Add), Xóa (Remove), Sửa (Update) và Xóa toàn bộ nội dung ListBox (Clear).
Khi tạo ra một biến Control kết nối với ListBox thì MFC xác định kiểu của biến đó là CListBox và tên biến ta đã đặt ở phần trước là m_wndListBox
Các phương thức quan tâm.
Mã://Thêm vào cuối ListBox một xâu là lpszItem, xâu này là xâu dạng NULL Terminal kết thúc ở cuối xâu bằng '\0' CListBox::AddString(LPCTSTR lpszItem); //Đếm số phần tử hiện có trong ListBox int CListBox::GetCount(); //Loại một phần tử vào trước một vị trí int CListBox::DeleteString(index); //Trả về chỉ số của phần tử đang được chọn int CListBox::GetCurSel(); //Bạn có thể xác lập chọn một hoặc nhiều phần tử trong listbox int CListBox::SetCurSel(int index); //Để lấy nội dung xâu có chỉ số index trong trong ListBox int CListBox::GetText(int index,LPTSTR lpszText); //========== Một số hàm làm việc với chế độ Multi Selection ========= //Chọn hoặc bỏ chọn một loạt phần tử từ nFirstItem đến nLastItem int CListBox::SetItemRang(BOOL bSel,int nFirstItem,int nLastItem); //Đếm số phần tử được chọn int CListBox::GetSelCount(); //Lấy danh sách các phần tử đã được chọn trên ListBox, hàm trả về //số phần tử đã được chọn trong ListBox và mảng chứa chỉ số các phần tử //đã được chọn int CListBox::GetSelItem(int nMaxItem,LPINT rgIndex); /MaxItem : Là số phần tử tối đa bạn muốn lấy đưa vào mảng rgIndex phải <= chỉ số tối đa của mang rgIndex
Để làm được điều này trong cửa sổ Properties bạn bắt Notify Message LBN_SELCHANGE của ListBox
-
30-03-2011, 01:14 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
cảm ơn Tadius, bài viết rất chi tiết và dễ hiểu.
mình đang nghiên cứu đến serialize & collection. không biết bạn có guide về vấn đề này chưa
-
19-04-2011, 06:38 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thax Tadius, mình rất cần những tut basic về MFC như thế này [IMG]images/smilies/biggrin.png[/IMG] Tiếp tục nha ^^
-
20-04-2011, 09:49 AM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
thankyou very much
nhưng tadious có thể chuyển qua code C để mình biên dịch với Mingw không.
-
22-04-2011, 08:52 AM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bài hướng dẫn rất hay ^^! Có sách hướng dẫn không ? Share mọi người với [IMG]images/smilies/kiss.gif[/IMG]
-
04-05-2011, 05:08 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bài hướng dẫn quá hay. Hi vọng bạn có thể viết thêm một vài control nữa. Thank
-
18-05-2011, 02:38 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bước 2 : Tạo project MFC Application mới
Chào, sao vc++ 2008 cùa mình khi tao project không giống như vầy:
Bên khung project types chỉ tới chỗ general là hết k có thư viện MFC???
Giúp mình nha.
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ