Tải bản đầy đủ (.doc) (35 trang)

Chuyên đề lập trình trực quan trên môi trường Visual C++ 6.0

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (818.24 KB, 35 trang )

Web tham khảo: www.codeproject.org
Nội dung Chuyên đề lập trình trực quan trên môi trường Visual C++ 6.0
1. Giới thiệu môi trường và hướng dẫn cài đặt Visual C++6.0
- Quá trình phát triển dòng ngôn ngữ lập trình Visual C++ 6:
C chuẩn trong DOS (ngôn ngữ cấu trúc – hàm – chức năng) => C ++ (lai – hướng đối tượng:
chứa khái niệm lớp) => C++ trên windows => Visual C ++ 5,6,7,8.
- Mục đích, ý nghĩa bộ công cụ lập trình trực quan Visual C++6: như tên gọi của nó, VC 6 hỗ
trợ cao nhất cho người dùng phát triển các ứng dụng Desktop.
Phân biệt: website, trình duyệt, google…
- Bộ cài: sử dụng bộ cài Visual Studio 6.0 hoặc Visual C++ 6.0
- Tài liệu tiếng Việt: Tự học Visual C++ 6.0 trong 21 ngày.
2. Bài tập lớn và thi hết học phần:
- Kết hợp làm bài tập lớn hai môn: lập trình trực quan và giấu tin trong ảnh
- Dùng bài tập lớn để lấy điểm học trình ( 3 điểm học trình)
- Phát triển bài tập lớn thành thi hết học phần: thi vấn đáp
- Nội dung bài tập lớn:
o Xây dựng một chương trình nhỏ: ví dụ tính lương, bán sách, nhập hàng trên cơ sở
một ứng dụng hội thoại.
o Dịch một hoặc hai chương trong giáo trình Lập trình trực quan và trình bày nội dung
dịch.
o Dùng visual C xây dựng một ứng dụng giấu tin trong ảnh đơn giản/ hệ chuyên gia/
trí tuệ nhân tạo/ lý thuyết mật mã và an toan dữ liệu/
Win-form
Nux-form
Ứng dụng
Desktop
Ứng dụng
Client-server
Công cụ lập trình web:
dotnet, java, php, html
Công cụ lập trình trực


quan: visual C, basic,
Foxpro,
Web-base: Dùng giao
thứcc http trên cổng 80,
sử dụng trình duyệt mặc
định là Web Browser:
IE, FireFox, Chrome
(google)
Netcafe, Chat – Messenger,
TeamViewer,
Ví dụ: ứng dụng
winform? Office sf..
3. Đặc điểm của ngôn ngữ lập trình VC++ trên windows:
3.1Giới thiệu về các hàm API: appliction programming interface
-
API functions được thiết kế dành cho các ngôn ngữ lập trình thủ tục (C, pascal, VB).
FILE *f = ..
Fread(f,…)
Int handle = _fopen(.sáas) _fread(int, byte *buff, int size);
_fread(handle,aslasa;)
Int handle = File duoc mo tren o cung;
Object
API => C
C=> C++ , API => MFC (C++, Java, vc)
The C language was procedural—it had no built-in support for the object-oriented features that are commonly used
today: encapsulation, inheritance, and polymorphism. The Windows API was designed and delivered as a
procedure-based interface and, hence, was perfect for the development technology of the time. However, as object-
oriented extensions to C were developed and more widely accepted in a new language called C++, an object-
oriented wrapper interface to the Windows API seemed a natural next step. Microsoft developed this interface as its
Application Frameworks (AFX) product in 1992. This evolved into the Microsoft Foundation Classes (MFC) product

that exists today.
3.2 Giới thiệu về MFC – MFC là gì ?
- Microsoft Foundation Class
- Là một thư viện các lớp (class) trong ngôn ngữ Visual C++, dùng cho việc lập trình
trên Windows. MFC thích hợp cho các ngôn ngữ hướng đối tượng.
- Được xây dựng trên cơ sở các hàm thư viện API của Windows. API thích hợp cho các
ngôn ngữ hướng thủ tục: Visual Basic, C chuẩn.
- Version 6 có khoảng 200 class
- Giúp cho người lập trình có thể xây dựng ứng dụng nhanh và ít tốn công sức hơn so
với việc sử dụng đơn thuần các hàm thư viện API của Windows
- Ta vẫn có thể gọi các hàm Windows API trong
MFC
He hanh
- cac dich vu
cua HDH
- tai nguyen
API
- tap cac
ham
- MFC
Lap trinh vien
Visual C++
MFC
The Windows API is object-based. This means that you can programmatically interact with the system objects (such
as windows, semaphores, and pens) through a handle and a defined interface. The actual implementation and data
used by the implementation is hidden from the view of the program. This “data hiding” is called encapsulation.
The MFC Class Libraries are object-oriented. This means that in addition to the encapsulation, the interfaces
(packaged in a set of C++ classes) also provide inheritance and polymorphism. Inheritance is the capability to share
and extend the functionality of an existing class. Polymorphism is the capability of objects to support the same
interface, but provide different implementations.

Gptbh(int a,int b,int c)
Gptbh(complexint a, complexint b, complexint c)
Note: Although the Windows API is procedural and designed to be called from procedural languages (like C), you
can (and will) use the Windows API directly from your MFC applications written in C++.
3.2 Giới thiệu về sự kiện và xử lý sự kiện:
Khái niệm sự kiện: là một hành động liên quan đến một đối tượng do hệ điều hành quản lý (vd:
chuột, bàn phím) được thực hiện bởi tác nhân là người dùng hoặc ngay chính một tiến trình nào đó
của hệ thống. fsfsfs
Ví dụ các sự kiện liên quan đến chuột:
 WM_LBUTTONDOWN
 WM_LBUTTONUP
 WM_LBUTTONDBLCLK
 WM_RBUTTONDOWN
 WM_RBUTTONUP
 WM_RBUTTONDBLCLK
 WM_MOUSEMOVE


WM_MOUSEWHEEL
3.3 Nhắc lại một số câu lệnh cơ bản trong C được giữ nguyên trong VC6
 Các kiểu dữ liệu cơ sở: int, char, long, double.
 Cách khai báo biến: int x; long a[100];
 Phép AND: dùng hai ký tự: “&&”
 Phép OR: dùng ký tự: “||”
 Phép tăng giá trị lên một đơn vị: ++ ten_bien; ++x;//x=x+1 a=b+c;//register:
 Phép giảm giá trị xuống 1 đơn vị: -- ten_bien; --x;
 Phép gán: sử dụng một dấu bằng (“=”) để thực hiện phép gán. Vd: int a=4; a = b;
 Phép so sánh: sử dụng hai dấu bằng (“==”) :
if(a==b)….;
else …;

 Vòng lặp:
o Hai dạng:
 Khai báo biến khởi tạo vòng lặp:
 int i;
 for(i=0;i<10;++i)
{
}
 int i=0;
 while(i<100)
{
sdsdsdsd
++i;
}
i=100;
 Chú ý:
o Mọi câu lệnh trong VC, C đều phải có dấu chấm phẩy ở cuối lệnh
o Chỉ riêng các lệnh cơ bản trong C như: if, for, while đều viết thường.
o Mọi kiểu biến cơ sở về kiểu dữ liệu số như: số nguyên (int), số thực (double), ký tự
(char) đều viết thường.
o
o Mọi hàm còn lại trong VC đều viết hoa chữ cái đầu.
o Mọi câu lệnh, chuỗi, tên biến, giá trị biến trong VC không chứa ký tự Việt. Do đó, khi
lập trình, nên tắt hết các chế độ gõ văn bản tiếng việt.
o Mảng, chuỗi hay xâu ký tự trong C, VC đều đánh chỉ số bắt đầu từ 0.
4. Tạo một dự án (project mới)
Giới thiệu: toolbar, một số nút chức năng quan trọng: biên dịch, chạy.
- Giới thiệu các cách tạo ứng dụng: document, dialog,..
- Giới thiệu thanh điều khiển, môi trường form
- Thực hành
4.1 Tạo một ứng dụng hội thoại Dialog

Các bước để tạo một ứng dụng hội thoại
Bước 1:
Bước 2:
Các bước tiếp theo: bấm Next hoặc OK
- Giới thiệu vùng tài nguyên các điều khiển: nguyên tắc sử dụng một điều khiển bất kỳ của
VC:
o Kéo điều khiển đó vào Form (bấm và giữ phím trái chuột, kéo rê điều khiển từ bảng
điều khiển vào Form)
o Đặt tên ID cho điều khiển: sau khi kéo điều khiển vào Form, bấm phải chuột vào điều
khiển, chọn Properties. Ở tab đầu tiên (General), hãy gõ tên ID mới cho điều khiển
vào mục ID. Có thể giữ nguyên tên ID mặc định của điều khiển.
o Thêm biến gắn với điều khiển: vào View => ClassWizard => Chọn Tab: Member
Variables. Chọn tên ID của điều khiển và bấm nút Add Variable.
o Dùng biến đã thêm ở trên để gọi các hàm của điều khiển.
- Dịch và chạy thử.
- Giới thiệu hàm: BOOL CT1Dlg::OnInitDialog()
- Mặc định, hệ thống tạo sẵn hàm OnInitDialog(). Hàm này được gọi đầu tiên trước khi Form
hội thoại xuất hiện.
MessageBox(“noi dung thong bao nam day”);
4.2 Cách sử dụng nút bấm
- Cách đưa một nút bấm vào Form
- Đặt tên cho nút bấm,
- đặt ID cho nút bấm
- Cách kích hoạt sự kiện cho nút bấm: 2 cách : bấm đúp chuột, dùng trình trợ giúp Wizward.
- Các sự kiện gắn với nút bấm: chỉ cần quan tâm một sự kiện: Click
- Xem hàm xử lý sự kiện nút bấm
- Dịch và chạy thử sự kiện này: cho hiện thông báo khi Click chuột vào nút.
- Hàm đầu tiên cần nhớ về VC6: Hiển thị một thông báo ra màn hình.
MessageBox(“Xau can hien thi”);
4.3 Cách sử dụng điều khiển Textbox

a. Đối tượng chuỗi trong VC6: CString.
 Khai báo 1 biến chuỗi tên là s: CString s,ss,s1,s2;
 Khởi tạo giá trị ban đầu cho s: s = “DH Tin K1”;s=ss;
 Các phép toán cần nhớ về chuỗi:
o Cộng hai chuỗi: Kết quả cộng hai chuỗi s1, s2 sẽ cho kết quả là một chuỗi s. Phép
toán cộng chuỗi: s = s1+s2; hoặc s = “Lop K1”+s2;
o So sánh hai chuỗi:
if(s1==s2)....; //vd: MessageBox(“s1=s2”);
else …;
o Hàm truy cập vào ký tự thứ i trong chuỗi: dùng phép toán: s[i]
o Hàm gán một ký tự mới vào một vị trí bất kỳ trong chuỗi: s.SetAt(chiso_can_gan,
ky_tu_can_gan);
vd: s = “DHTin K1”. Ta muốn thay ký tự ở vị trí 2 bằng ‘A’.
s.SetAt(2,’A’); => s = “DHAK1”
o Hàm lấy độ dài chuỗi: int n = s.GetLength();
o Đổi một chuỗi sang toàn các ký tự hoa: s.MakeUpper();
o Đổi một chuỗi sang toàn các ký tự thường: s.MakeLower();
o Hàm tìm kiếm một xâu con trong chuỗi: CString
int i = s.Find(xau_can_tim, vi_tri_bat_dau_tim);
int i = s.Find(“anh”, 0);
Hàm Find nhận vào hai đối như trên, hàm trả về chỉ số đầu tiên của xau_can_tim
trong chuỗi s. Nếu không tìm thấy, hàm Find trả về giá trị -1.
o Hàm tìm kiếm một ký tự trong chuỗi:
int i = s.Find(Kytu_can_tim, vi_tri_bat_dau_tim);
Hàm Find nhận vào hai đối như trên, hàm trả về chỉ số đầu tiên của kytu_can_tim
trong chuỗi s. Nếu không tìm thấy, hàm Find trả về giá trị -1;
o Xóa một, hoặc một số ký tự liên tiếp trong chuỗi:
s.Delete(vi_tri_xoa, xoa_bao_nhieu_kytu);
vd: s = “LopDHTanhin K1 ”; Ta muốn xóa các ký tự từ vị trí thứ 3 đến vị trí 6 => Số
ký tự xóa = 6-3=3; Gọi hàm: s.Delete(3,3); => s=” Lopin K1”

o Hàm xóa bỏ mọi ký tự trắng thừa ở đầu chuỗi: s.TrimLeft();
o Hàm xóa bỏ mọi ký tự trắng thừa ở cuối chuỗi: s.TrimRight();
o S.trim();
o Hàm chèn thêm một chuỗi con vào một vị trí bất kỳ trong chuỗi s.
s.Insert(vitri_can_chen, xau_con_can_chen);
vd: s = “Lop DHTin K1”; CString ss = “abc”; s.Insert(5,”abc”);
=>s = “Lop DabcHTin K1”
o Hàm copy một chuỗi con từ chuỗi s ban đầu:
CString ss;
ss = s.Mid(vitri_dautien_can_copy, soluong_kyty_can_copy);
VD: s = “LopDHTin K1”;
Ta cần copy chuỗi con DHT trong s ra chuỗi mới ss => Làm như sau:
CString ss; //Khai báo một biến mới chứa chuỗi con
ss = s.Mid(3,3);
o Hàm định dạng dữ liệu đưa ra màn hình: Bạn muốn hiển thị một thông báo ra màn
hình có chứa số liệu để kiểm tra, ta sẽ dùng hàm Format của đối tượng chuỗi như
sau:
CString s;
int m=5; s.Format(“Gia tri = %d”,m); MessageBox(s);
printf(“So in ra la %d”,m);
b. Cách tạo và sử dụng điều khiển textbox
- Cách đưa một điều khiển textbox vào Form
- Đặt tên ID cho điều khiển textbox: bấm phải chuột vào điều khiển textbox, chọn Properties
=> Đặt lại tên ID cho textbox trong hộp ID.
- Chú ý một số thuộc tính quan trọng của điều khiển textbox trong tab: Styles:
- Các sự kiện gắn với điều khiển Textbox: không cần quan tâm.
- Khai báo một biến để chứa dữ liệu của điều khiển textbox:
o Vào View=> ClassWizard => Bấm sang Tab thứ 2 (member variables) => Bấm chuột
vào ID của điều khiển textbox mà bạn vừa đặt tên ở bước trước. Sau đó, chọn Add
Variables.

o Hiện lên cửa số mới như sau:
- Các hàm cần thiết phải nhớ về điều khiển textbox:
o Lấy dữ liệu từ điều khiển TextBox: Dùng lệnh UpdateData(1) như sau:
UpdateData(1);
Sau câu lệnh này, biến gắn với điều khiển textbox mà bạn vừa tạo ở trên đã
chứa dữ liệu trên ô TextBox. Bạn có thể thao tác với biến này. Ví dụ: Hiển thị
nội dung dữ liệu trên textbox: MessageBox(m_hoten);
o Đưa dữ liệu lên điều khiển TextBox: Theo các bước sau:
 Khởi tạo dữ liệu cho biến gắn với Textbox:
vd: m_hoten = “Nguyen Van Nam”;
 Gọi lệnh: UpdateData(0);
- Dịch và chạy thử .
4.4 Điều khiển nhãn (Static control)
- Dùng để ghi tên (nhãn) bên cạnh các mục của giao diện.
- Cách sử dụng: kéo điều khiển nhãn (biểu tượng “Aa”) từ bảng các điều khiển vào trong
Form.
- Bấm phải chuột vào điều khiển, chọn Properties. Sau đó gõ tên nhãn mình cần vào mục:
Caption.
4.5 Thực hành
Khi đó, bạn hãy:
 Gõ tên biến vào tiếp theo ký tự
m_, ví dụ: m_hoten.
 Không làm gì ở mục: Category
 Ở mục Variable Type: bạn có
thể chọn một kiểu dữ liệu thích
hợp để chứa dữ liệu trên ô
textbox như: chuỗi (CString), số
nguyên (int), số thực…
a. Xây dựng một ứng dụng nhỏ:
b. Xây dựng ứng dụng giải phương trình bậc hai:

S = “-233akkd”
N = 8,
‘0’….’9’ ‘-‘
c. Xây dựng ứng dụng sau:
Xây dựng chương trình sau
User có thể nhập Text
First name:
User có thể nhập Text
Last name:
Make Full
User ko thể sửa nội dung ô này
Fullname:
Yêu cầu 1: Khi nhập xong First name, Last name. Bấm nút Make Full sẽ hiện tên
đầy đủ vào TextBox full name.
Nhập a:
Nhập b:
Nhập c:
Kết quả:
Nhập 1 xâu:
Kết quả:
Xóa hết các ký tự số trong xâu nhập trên.
Nhập 1 xâu:
Kết quả:
Chuẩn hóa xâu nhập: xóa các ký tự trắng thừa
ở cuối và đầu, giữa hai từ chỉ để lại 1 ký tự
trắng, bắt đầu mỗi từ phải viết hoa.
d. Xây dựng ứng dụng sau: (để biết mã ký tự ‘0’, vào Character Map)
n = 31 0,31
=> “nguyen van nam”
void CT1Dlg::OnOK()

{
UpdateData();
CString s = m_s1;
s.TrimLeft();
s.TrimRight();
int n = s.GetLength();
for(int i=n-1;i >0;--i)
{
if(s[i]==' ' && s[i-1]==' ')s.Delete(i,1);
}
n= s.GetLength();
for(i=0;i<n;++i)
{
if(i==0 && s[i] >= 97)s.SetAt(i, s[i] - 32);
else if(s[i]== ' ' && s[i+1] >= 97)s.SetAt(i+1, s[i+1] - 32);
}
m_s2 = s;
UpdateData(0);
}
4.5 Điều khiển danh sách ComboBox, ListBox, simple list
- Kéo điều khiển ComboBox vào Form
- Đặt tên cho điều khiển: ví dụ: IDC_COMBO1
- Thiết lập một số thuộc tính cho điều khiển:
- Owner draw: xác định lập trình viên có muốn viết đè hàm vẽ từng item trên điều
khiển hay không. Giá trị mặc định là No, nghĩa là ứng dụng VC tự vẽ và render từng
item trong điều khiển. Khi ta muốn viết hàm vẽ tùy biến cho từng item (ví dụ vẽ
thêm ảnh hoặc icon bên cạnh text cho tưng item). Thì ta phải thiết lập thuộc tính
owner draw. Có hai chế độ: fixed: mỗi item có chiều cao như nhau và động (varible).
Một khi đã chọn chế độ owner draw, bắt buộc lập trình viên phải khai báo hàm đè
DrawItem của điều khiển để thêm các mã tùy biến cho việc vẽ thêm icon bên cạnh

text.
- Khai báo biến gắn với điều khiển: Vào View=>ClassWizard:
- Thêm dữ liệu vào danh sách:
for(int i=0;i<10;++i)
m_combo.AddString("DHTin K1");
- Các sự kiện cần quan tâm của điều khiển Danh sách: sự kiện khi người dùng chọn một mục
nào đó trong danh sách (CBN_SELCHANGE). Vào View=> ClassWizard và làm theo trình tự 4
bước sau đây:

- Bây giờ, mỗi khi người dùng chọn một mục trong danh sách, hàm có tên ở trên
(OnSelchangeCombo1) sẽ được gọi.
- Hàm lấy chỉ số mục đang được chọn hiện tại:
int id = m_combo.GetCurSel();
- Hàm lấy tống số phần tử trong danh sách:
int n = m_combo.GetCount();
- Hàm lấy nội dung của một mục có chỉ số id trong danh sách và đặt vào biến CString s;
m_combo.GetLBText(id, s);
- Hàm thiết lập một mục nào đó được chọn: m_combo.SetCurSel(id);
MỘT SỐ HÀM NÂNG CAO CỦA COMBOBOX:
- SetEditSel(int start, int end): select nội dung text có trên ô EditBox bắt đầu từ vị trí start
đến vị trí end.
- SelectString (int startafter, string s): tìm kiếm và đối xánh xâu s với các item có trong
comboBox, nếu tìm thấy sẽ thực hiện select item đó và đưa item đó lên hộp EditBox. Tham
số startafter = -1: mang nghĩa tìm kiếm trên toàn bộ hộp ComboBox.
- ShowDropDown(): hiển thị dropdown cho ComboBox
- GetWindowText(CString &s): trả về nội dung text trên hộp EditBox
- SetWindowText(CString s); gán nội dung text lên hộp editbox
Một số sự kiện đáng chú ý:
- OneditChange();
- OnDropDown():

- OnSelChange();
- PretranslateMessage():
Bài tập: Tạo ComboBox hỗ trợ khả năng AutoComplete giống hệt như hộp comboBox chứa các hàm
trong một dự án của Visual C++6
In header file:
CString ds2[100],ds[100];//Luu toan bo noi dung ConboBox, ds[] chuyen toan bo sang
chu thuong, ds2[]: giu nguyen dinh dang
int N; //Tong so item co trong danh sach ban dau
bool m_bAutoComplete; //xu ly khi user bam BackSpace hoac Delete
int realLength; //do dai thuc su cua noi dung tren EditBox do user nhap vao
In source file:
BOOL CVd1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
//...
// TODO: Add extra initialization here
cbBox.AddString("Pham The Anh");
cbBox.AddString("Le Dinh Danh");
cbBox.AddString("Nguyen Kha Tho");
cbBox.AddString("Tran Doan Minh");
cbBox.AddString("Le Duc Tho");
cbBox.AddString("Nguyen Viet Nam");
cbBox.AddString("Phan Huy Minh");
cbBox.AddString("Nguyen The Ngoc");
cbBox.AddString("Do Van Hoa");
cbBox.AddString("Nguyen Minh Phuong");
N = cbBox.GetCount();
for(int i=0;i<N;++i)
{ cbBox.GetLBText(i,ds[i]);
ds2[i] = ds[i];

ds[i].MakeLower();
}
m_bAutoComplete = true;
return TRUE; // return TRUE unless you set the focus to a control
}

void CVd1Dlg::InitData()
{
int i;
cbBox.ResetContent();
for( i=0;i<N;++i)cbBox.AddString(ds2[i]);

×