Professional Documents
Culture Documents
Xử lý chuỗi
Một số thao tác thông dụng
◦ Gán :
Mảng tĩnh : strcpy(StrName1,”Hello Vietnam”);
Mảng động : StrName2 = “Hello Vietnam” hoặc StrName6 = strdup(“Hello
Vietnam”);
◦ Chiều dài mảng :
int len = strlen(StrName3);
◦ Các lênh khác như :
strcat - nối chuỗi
strchr/strstr - trả về chuỗi mới từ ký tự/chuỗi tìm thấy trong chuỗi cũ
strcmp - so sánh chuỗi
strtok - phân chia chuỗi
strtol/strtod - chuyển chuỗi thành số kiểu nguyên/thực
strupr/strlwr - chuyển thành chuỗi chữ hoa/thường
◦ Định dạng chuỗi :
int a = 10; long b = 100; double c = 8.5; float d = 20.25;
char *str = “number”; char h = ‘:’;
Mảng tĩnh :
sprintf(StrName1,"The %s is %c %d %ld %.1lf %.2f",str,h,a,b,c,d);
Mảng động :
sprintf(StrName2 = new char[100],"The %s is %c %d %ld %.1lf %.2f",str,h,a,b,c,d);
Xử lý chuỗi
Lớp CString
◦ Thuộc thư viện MFC giúp hỗ trợ các thao tác xử
lý chuỗi thông thường
◦ Phương thức thiết lập:
CString(const unsigned char* psz);
CString(LPCWSTR lpsz);
CString(LPCSTR lpsz);
◦ Ví dụ :
CString strName(“Hello World”);
CString strName = strName1;
Xử lý chuỗi
Lớp CString (const)
◦ Các thao tác khác :
FreeExtra() : xoá bỏ phần bộ nhớ còn dư
◦ Gọi hàm : strName.FreeExtra();
Xử lý chuỗi
Lớp CString (const)
◦ Các thao tác khác :
CString Left(int nCount) const : Trích chuỗi con từ trái qua
CString Right( int nCount ) const : Trích chuỗi con từ phải qua
CString Mid(int nFirst) const / CString Mid(int nFirst, int nCount) const : Trích chuỗi
con từ vị trí bất kỳ
int Find(LPCTSTR lpszSub) const / int Find(LPCTSTR pstr, int nStart) const : Tìm vị
trí xuất hiện chuỗi con
int Delete(int nIndex , int nCount = 1) : xoá nCount ký tự từ ký tự thứ nIndex
int Remove(TCHAR ch) : xoá một ký tự
int Replace(TCHAR chOld, TCHAR chNew) / int Replace(LPCTSTR lpszOld, LPCTSTR
lpszNew) : Thay thế ký tự/chuỗi
int Collate(LPCTSTR lpsz) const /int CollateNoCase(LPCTSTR lpsz) const : So sánh
hai chuỗi
void TrimLeft() / void TrimRight() : Xoá khoảng trắng dư thừa đầu/cuối
BOOL IsEmpty() const : Kiểm tra chuỗi rỗng
Xử lý chuỗi
Chuyển đổi giữa các kiểu số
◦ Từ kiểu nguyên sang thực
int a = 10; double d = (double)a;
Thuộc
tính
Định nghĩa
ID cho
control
GetWindowText(Cstring &) :
◦ Lấy nhãn của nút
SetWindowText(LPCTSTR) :
◦ Gán nhãn nút
ShowWindow(int nCmdShow) :
◦ với nCmdShow là SW_SHOW hay SW_HIDE để làm ẩn hiện
nút bấm
EnableWindow(bool bEnable = TRUE) :
◦ kích hoạt nút / nhưng kích hoạt nút
DeleteString(UINT nIndex)
◦ Xóa một Item thứ nIndex trên ListBox
◦ Thứ tự Index của các Item là 0,1,2,… theo thứ tự AddString
int GetCurSel()
◦ Lấy index của Item đang được chọn
GetText(UINT nIndex,CString &)
◦ Lấy chuỗi của Item thứ nIndex
int GetCount()
◦ Cho biết có bao nhiêu Item hiện có trong ListBox
ResetContent()
◦ Xóa toàn bộ Item có trong ListBox
Run
Xử lý nhấp chuột
Các thông điệp xử lý chuột
◦ Khi dùng Wizard ánh xạ thông điệp với một hàm điều khiển thì
các hàm điều khiển sẽ có dạng sau :
◦ Trong đó :
nFlags : dùng để nhận biết nút bấm chuột và các phím Ctrl/Shift bởi
phép toán &) có giá trị:
point : với point.x và point.y cho biết vị trí nhấp chuột ở đâu trên
cửa sổ ứng dụng
Ví dụ :
◦ Để nhận biết phím Ctrl có được nhấn kèm với chuột dùng
if ((nFlags & MK_CONTROL) == MK_CONTROL) {…}
Xử lý nhấp chuột
Các thông điệp nhấn phím
Trong đó :
nChar : gồm phím ký tự thông thường và phím ảo
nRepCnt : Đếm số lần lặp lại nếu phím được nhấn và giữ
nFlags : Xác nhận các loại scan code,key transition code,
context code.
Xử lý nhấn phím
Các thông điệp nhấn phím
◦ nChar : Bảng phím ảo
Các thông điệp nhấn phím
◦ nFlags : Xác nhận các loại scan code,key transition code,
context code
Xử lý nhấn phím
Các bước áp dụng xử lý nhấn phím
◦ Bước 1 : Vì sự kiện KeyDown không tự động có sẵn trong
chương trình nên ta làm thao tác SendMessage để dịch mã
phím và gửi sự kiện WM_KEYDOWN khi người dùng thao tác
Dùng ClassWizard , thêm hàm xử lý sự kiện PreTranslateMessage
Viết thêm đoạn code SendMessage trong hàm PreTranslateMessage
Các bước áp dụng xử lý nhấn phím
◦ Bước 2 : Dùng ClassWizard thêm hàm xử lý sự kiện WM_KEYDOWN.
Dùng biến nChar trong hàm này để kiểm tra phím nào được nhấn
Lưu ý : Trong trường hợp muốn xử lý nhấn nhiều phím cùng lúc thì dùng
hàm ::GetKeyState để kiểm tra phím ảo nào được nhấn cùng.
MFC Collection
◦ Thư viện MFC cung cấp một số lớp lưu trữ dùng để lưu
một nhóm dữ liệu (ví dụ : danh sách chuỗi, số
nguyên,Sinh Viên, Khách Hàng, Hang Hóa v.v… )
◦ Các lớp lưu trữ này được chia làm hai loại :
Lớp lưu trữ tạo từ các mẫu C++
(Collection classes created from C++ templates)
Lớp lưu trữ không tạo từ các mẫu C++
(Collection classes not created from C++ templates)
◦ Các dạng lưu trữ thông dụng MFC hỗ trợ
List : dạng danh sách liên kết
Array : dạng mảng
Map : dạng từ điển
Array structure
Map structure
◦ Cách dùng
Thêm thư viện Afxcoll.h trước khi dùng
Khai báo : TênLớp biếnmảng;
Ví dụ : CStringArray strarr;
Ví dụ : #include “Afxtempl.h”
…..
CList <Book, Book&> list
◦ Cách dùng
Thêm thư viện Afxcoll.h trước khi dùng
Khai báo : TênLớp biếnmảng;
Ví dụ : CStringList strlist;
◦ Kiểu dữ liệu POSITION
Là kiểu dữ liệu dùng trong List để đại diện cho vị trí của một phần
tử trong List.
Operations
◦ RemoveHead Removes the element from the head of the list.
◦ RemoveTail Removes the element from the tail of the list.
◦ AddHead Adds an element (or all the elements in another list)
to the head of the list (makes a new head).
◦ AddTail Adds an element (or all the elements in another list) to
the tail of the list (makes a new tail).
◦ RemoveAll Removes all the elements from this list.
Retrieval/Modification
◦ GetAt Gets the element at a given position.
◦ SetAt Sets the element at a given position.
◦ RemoveAt Removes an element from this list, specified by
position.
Searching
◦ Find Gets the position of an element specified by pointer value.
◦ FindIndex Gets the position of an element specified by a zero-
based index.
Status
◦ GetCount Returns the number of elements in this list.
◦ IsEmpty Tests for the empty list condition (no elements).
SinhVien.cpp
CollectionDemoDlg.h
Class Winzards
Ví dụ dùng Array
Ví dụ List
Book.h
Book.cpp
Ví dụ List
CCObListDemoDlg.h
Class Winzards
CCObListDemoDlg::OnInitDialog()
Ví dụ List
Lớp lưu trữ dạng Map
◦ Một map, được xem như một dictionary, là một bảng
gồm nhiều phần tử được xác định bởi khoá
◦ MFC cung cấp tập các lớp hỗ trợ sử dụng map như
Xử lý Dialog
Modal Dialog
◦ Lớp MFC quản lý : CDialog
Xử lý Dialog
Modal Dialog
◦ Bước chuẩn bị :
Giả sử ta có một chương trình hiển thị một danh sách Sinh
Viên
Yêu cầu : Thêm nút Thông Tin để mở dạng Modal Dialog
Xử lý Dialog
Modal Dialog
◦ Bước chuẩn bị (const)
Modal Dialog
◦ Bước 1 : Thêm một Dialog trong Resource
Modal Dialog
◦ Bước 2 : Thêm các control vào dialog & Thiết lập thuộc
tính Dialog
Modal Dialog
◦ Bước 3 : Khai báo lớp một kế thừa từ lớp CDialog
Xử lý Dialog
Các bước tạo vả xử lý Modeless Dialog
◦ Ví dụ : Cũng ví dụ Modal Dialog trên. Ta thêm nút chi tiết. Khi
nhấn vào nó một hộp thoại dạng Modeless sẽ bật lên có nhiệm
vụ hiển thị thông tin chi tiết của mỗi Sinh Viên khi người dùng
chọn trong ListBox
Modeless Dialog
◦ Bước 1 & 2 : Giống như tạo một Dialog thông thường
Modeless Dialog
◦ Bước 3 : Tạo một đối tượng kiểu Modeless Dialog
Modeless Dialog
◦ Bước 4 : Xác định lúc cần ẩn hay hiện Modeless Dialog
Các hộp thoại thông dụng :
◦ MFC hỗ trợ các lớp đại diện cho các hộp thoại sau :
Xử lý Dialog
Các hộp thoại thông dụng
◦ Open Dialog
Xử lý Dialog
Các hộp thoại thông dụng
◦ Open Dialog
Lưu ý :
0 : Hộp thoại Save File
1 : Hộp thoại Open File
Các hộp thoại thông dụng
◦ Color Dialog
Xử lý Dialog
Các hộp thoại thông dụng
◦ Color Dialog
Các hộp thoại thông dụng
◦ Font Dialog
Xử lý Dialog