Tải bản đầy đủ (.pdf) (298 trang)

giáo trình môn học lập trình windows - nguyễn trí tuấn

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 (2.84 MB, 298 trang )

Nguyen Tri Tuan – Khoa CNTT – DHHKTN – TP.HCM (Updated 02/2004) 1 / 3
ĐỀ CƯƠNG MÔN HỌC: LẬP TRÌNH WINDOWS
(WINDOWS PROGRAMMING)
Mã môn học: ………
45 tiết lý thuyết, 30 tiết thực hành
oOo

I. Tóm tắt mục tiêu của môn học:
- Cung cấp cho sinh viên kiến thức và phương pháp lập trình trên môi
trường Windows: cơ chế quản lý chương trình, lập trình giao diện đồ họa
(GUI), cơ chế quản lý bộ nhớ, lập trình đồng hành, kỹ thuật in ấn…, từ đó
sinh viên có khả năng tự xây dựng 1 ứng dụng hoàn chỉnh ở mức độ vừa
phải bằng ngôn ngữ Visual C++, trên nền thư viện MFC.
- Tạo cho sinh viên một nền tảng trong việc tiếp thu và khai thác các ngôn
ngữ lập trình cấp cao khác trên Windows như: Visual Basic, Delphi, C++
Builder, Access, …
- Tạo cho sinh viên một kiến thức cơ bản để có thể tự nghiên cứu các kỹ
thuật lập trình sâu hơn trên môi trường Windows.

II. Các môn học trước:
Tin học đại cương A1, Tin học đại cương A2, Lập trình hướng đối tượng,
Cấu trúc dữ liệu.

III. Đối tượng áp dụng:
- Sinh viên hệ Cao đẳng
- Sinh viên hệ chính qui chuyên ngành CNTT, giai đoạn 2
- Sinh viên hệ Hoàn chỉnh đại học chuyên ngành CNTT

IV. Nội dung môn học:
Chương 0: Các khái niệm cơ bản
1. Giới thiệu các thư viện lập trình của HĐH Windows


2. Các thành phần giao diện GUI (Cửa sổ, hộp thoại, các controls,…)
3. Các khái niệm cơ bản (Handle, ID, Instance, Callback)
4. Lập trình sự kiện (Event driven programming), vòng lặp xử lý thông
điệp (Message loop) trong các ứng dụng
5. Tài nguyên của ứng dụng (Resources)
6. Một chương trình tổng quát xây dựng trên Windows 32 API
7. Các kiểu dữ liệu cơ bản

Chương 1: Kỹ thuật lập trình Visual C++ (MFC)
1. Giới thiệu về MFC
2. Chương trình MFC đầu tiên
3. Xử lý Mouse và Keyboard
4. Xử lý menu
5. Toolbar, Statusbar
Nguyen Tri Tuan – Khoa CNTT – DHHKTN – TP.HCM (Updated 02/2004) 2 / 3
6. Các Control
7. Xây dựng và xử lý hộp thoại (Dialog box)
8. Documents và Views: Scroll view, List view, Tree view
9. SDI – Single Document Interface
10. MDI - Multi Document Interface

Chương 2: Thư viện liên kết động (DLL)
1. Giới thiệu
2. Xây dựng 1 DLL
3. Cách thức gọi DLL trong ứng dụng
4. Chặn thông điệp (Hook) - Một ứng dụng minh họa (bộ gõ phím tiếng
Việt)

Chương 3: Quản lý bộ nhớ
1. Tổng quan

2. Phân trang bộ nhớ (Paging Memory)
3. Không gian địa chỉ ảo (Virtual Address Space)
4. Các hàm xử lý trên bộ nhớ ảo (Virtual Memory Functions)
5. Về các hàm xử lý bộ nhớ chuẩn của C/C++

Chương 4: Thư viện đồ họa GDI (Graphics Device Interface)
1. Giới thiệu
2. Một chương trình minh họa các hàm GDI cơ bản
3. Bitmap
4. In ấn (Printing)

Chương 5: Xử lý Clipboard
1. Giới thiệu
2. Các kiểu định dạng dữ liệu (data format) dùng trong Clipboard
3. Các kỹ thuật thao tác trên Clipboard
4. Xây dựng 1 Clipboard Viewer

Chương 6: Multi-Media
1. Tổng quan về các hàm thư viện
2. Thư viện MCI (Media Control Interface)
3. Một chương trình minh họa điều khiển CD-audio và play file WAV

Chương 7: Multi-thread programming
1. Khái niệm Multi-tasking và Multi-threading
2. Tiến trình (Process), tiểu trình (Thread)
3. Chương trình Multi-thread đơn giản
4. Quản lý các tiểu trình
- Tạo lập tiểu trình
- Kết thúc tiểu trình
- Tạm dừng tiểu trình (Thread suspension)

- Tiếp tục tiểu trình (Thread resumption)
Nguyen Tri Tuan – Khoa CNTT – DHHKTN – TP.HCM (Updated 02/2004) 3 / 3
5. Đồng bộ các tiểu trình (Thread Synchronization)
6. Lưu trữ cục bộ trong tiểu trình (Thread Local Storage – LTS)

V. Tài liệu tham khảo:
1. Lê Hữu Đạt - Lập trình Windows – Nhà xuất bản giáo dục, 2000
2. Jeff Prosise - Programming Windows with MFC 2
nd
Edition, Microsoft
Press, 1999
3. Charles Petzold - Programming Windows 5
th
Edition - Microsoft Press,
1998
4. Matt Pietrek - Windows 95 System Programming SECRETS - IDG Books
Worldwide Inc., 1995
5. Thuan Q.Pham and Pankaj K.Garg – Multithreaded Programming with
Windows NT – Prentice Hall PTR, 1996
6. Windows 95 Developer’s Guide
7. David J. Kruglinski and Scott Wingo and George Shepherd - Programming
Microsoft Visual C++ 5
th
Edition - Microsoft Press, 1998
8. MSDN
9. www.codeguru.com
10. www.codeproject.com

VI. Qui định thực hành:
- Ngôn ngữ lập trình: Visual C++, chế độ GUI (Graphics User Interface

mode), sử dụng thư viện MFC.
- Khuyến khích thiết kế chương trình theo hướng đối tượng
- Thời gian tự làm bài thêm: 90 tiết

- Người biên soạn: Th.S. NGUYỄN TRI TUẤN

- Người duyệt: …………………………………

Nguyen Tri Tuan – Khoa CNTT – DH KHTN Tp.HCM 1/1
CÁC QUI ĐỊNH - Môn học: Lập trình C trên Windows
oOo

1. Cách tính điểm:
- Môn học chỉ thi trên máy vào cuối khóa, không thi viết trên giấy
- Điểm thi cuối khoá: 50%
- Điểm bài project giữa khóa: 50% (từ 1-4 bài project).
- Có thể có các đồ án môn học cộng điểm (không quá 30% tổng số điểm)

- Được phép sử dụng tất cả tài liệu và đĩa mềm khi thi
- Tất cả các bài làm giống nhau sẽ bị điểm 0

2. Làm bài thực hành:
- Phải có kiến thức tốt về lập trình hướng đối tượng
- Phải có kiến thức tốt về sử dụng hệ điều hành Windows và các ứng dụng khác
- Phải chuẩn bị bài thực hành trước khi vào giờ thực hành
- Công cụ lập trình: Visual C++ 6, sử dụng MFC
- Chương trình viết phải ngăn nắp, thẳng hàng, ghi chú đầy đủ. Đặt tên biến
và tên hàm phải gợi nhớ, có qui ước xác định (VD. Tên biến chữ thường,
tên hàm chữ hoa …)


3. Bài tập Project và đồ án:
Xem thêm phần “Hướng dẫn làm bài tập Project hay Đồ án môn học”

Hết
Nguyen Tri Tuan – Khoa CNTT – DH KHTN Tp.HCM 1/2
Hướng dẫn làm bài tập Project hay Đồ án môn học
oOo

1. Phạm vi áp dụng:
Hướng dẫn này được áp dụng cho các bài thực hành giữa kỳ (bài tập project) vàv
các bài đồ án cộng điểm của các môn học sau:
- CTDL 1 & 2
- Lập trình C trên Windows
- OOP

2. Yêu cầu chung:
- Thường các bài tập Project hay đồ án sẽ được yêu cầu nộp 2 phần chính:
 Sưu liệu: là phần tài liệu .DOC đi kèm, để mô tả bài tập. Chỉ nộp
file. Xem phần [3] để biết nội dung sưu liệu.
 Chương trình: xem phần [4] để biết cấu trúc đĩa nộp.
- Để tránh tình trạng kiện cáo mất bài nộp sau này, yêu cầu thực hiện theo các
qui định sau:
 Lớp trưởng chỉ nộp cho GV 1 đĩa CD duy nhất chứa tất cả bài
nộp của các bạn trong lớp. GV sẽ không nhận nộp đĩa mềm vì có
thể thất lạc hay hư hỏng.
 GV sẽ không nhận bất kỳ bài nộp nào qua email, vì bất kỳ lý do
gì. GV cũng sẽ không trả lời email gởi nộp bài, và đương nhiên,
bài nộp đó coi như không có.

3. Gợi ý viết báo cáo sưu liệu: (không nhất thiết phải có đủ các mục)

Phần 1: Mở đầu
- Nêu mục tiêu và nội dung của đồ án/project.
Phần 2: Mục lục
Phần 3: Các cơ sở lý thuyết
- Trình bày các cơ sở lý thuyết liên quan đến các nội dung mà đồ án sẽ giải
quyết.
- Phân tích các hướng tiếp cận khác nhau (nếu có)
- Chọn ra phương pháp được sử dụng trong đồ án
Phần 4: Phân tích và thiết kế chương trình
- Các thuật toán quan trọng
- Trình bày trên phương diện lý thuyết các thuật toán then chốt trong chương
trình. Minh họa bằng lưu đồ. Đánh giá, phân tích.
- Thiết kế chi tiết của chương trình: các CTDL, các hàm quan trọng, các giải
thuật, các bước thực hiện cài đặt
- Các cấu trúc dữ liệu cần thiết. Nêu mô tả, ý nghĩa từng cấu trúc, các field, lý
do chọn lựa CTDL.
- Các hàm quan trọng: nêu prototype, ý nghĩa các tham số, kết quả trả về, nội
dung của hàm
Phần 5: Hướng dẫn & Trợ giúp
- Hướng dẫn sử dụng và cài đặt chương trình
- Môi trường hoạt động của chương trình: OS, các phần mềm tiện ích, thư viện
cần có khác
Phần 6: Đánh giá
Nguyen Tri Tuan – Khoa CNTT – DH KHTN Tp.HCM 2/2
- Ưu khuyết điểm của chương trình, đồ án.
- Đánh giá kết quả thực hiện: phần nào đã hoàn thành, phần nào chưa ?
- Hướng mở rộng của chương trình ?
Phần 7: Tài liệu tham khảo
- Liệt kê cụ thể các tài liệu tham khảo, tên tác giả, tựa, năm xuất bản, trang nào ?
- Liệt kê cụ thể địa chỉ Web-site


4. Cấu trúc đĩa nộp:
Mỗi người có 1 thư mục duy nhất, tên thư mục là mã SV. VD. 012123. Trong thư
mục có những phần sau đây:
o Thư mục con <SOURCE> chứa toàn bộ chương trình nguồn của project
o Thư mục con <RELEASE> chứa file thi hành EXE và các file thư viện
(Lib, DLL,…), nếu có.
o Thư mục con <SETUP> chứa toàn bộ chương trình cài đặt của project
(nếu cần phải setup).
o Thư mục con <DOCUMENTS> chứa các file Word là sưu liệu của
chương trình
o Thư mục con <REFERENCES> chứa các file tài liệu tham khảo (DOC,
PDF, HTML, source code…) mà Project có tham khảo, nếu có.
Lưu ý: không nộp các file trung gian trong quá trình biên dịch như NCB, OPT, PCH, …

5. Các lưu ý khác:
- Nếu chương trình có sử dụng các công cụ khác (không phải thư việc chuẩn
của ngôn ngữ) hay cần phải thực hiện các thao tác cài đặt/đăng ký mới chạy
được thì bắt buộc phải có chương trình Setup đi kèm.
- Chương trình phải được thử nghiệm chạy tốt trên các môi trường Win9x,
Win2000, WinXP.
- Nên Setup và Test chương trình trên các máy bình thường (không phải máy
dùng để develop chương trình) để tránh tình trạng cài đặt thiếu thư viện,
Component, ActiveX, …

Hết

© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 1/7
Môn học Lập trình C trên Windows
Bài tập thực hành

oOo

Chương 0:

1. Làm quen với 1 chương trình C viết trên thư viện API
a. Phần 1:

- Sử dụng VC++ 6, dùng chức năng New project, chọn loại project “Win32 Application”
- Chọn chức năng “A typical Hello World !” application
- Hoàn tất tạo project, biên dịch và chạy thử nghiệm chương trình
b. Phần 2:

- Thay đổi tiêu đề của của sổ thành “Chuong trinh C/API”
- Thay đổi nội dung hiển thị trên màn hình client area thành:
“Day la chuong trinh dau tien…
… viet bang VC++…
… tren HDH Windows…
… bang thu vien API. “

2. Tài nguyên của chương trình: lấy chương trình kết quả của bài tập 1, thực hiện tiếp:
a. Phần 1:

- Thay đổi biểu tượng của chương trình
- Thay đổi con trỏ chuột
- Thay đổi nội dung của hộp thoại “About”
b. Phần 2:

- Bổ sung thêm vào menu “File” các mục sau: New, Open, Save
- Thêm mới 1 menu popup “Edit” với các item sau: Undo, Cut, Copy, Paste, Select all
- Mỗi menu item đều có phím tắt tương ứng


3. Lập trình sự kiện: lấy chương trình kết quả của bài tập 2, thực hiện tiếp:
a. Phần 1:

- Khi user chọn menu item, hiển thị dialog box thông báo:
“Ban vua chon chuc nang XXXX”
- Khi user thoát chương trình, hiển thị dialog box hỏi xác nhận
b. Phần 2:

- Khi user click mouse trái/phải, hiển thị dialog box thông báo:
“Ban vua nhan mouse trai [phai], tai toa do X=, Y=”

Chương 1:

4. Làm quen với 1 chương trình C viết bằng thư viện MFC
a. Phần 1:

- Sử dụng VC++ 6, dùng chức năng New project, chọn loại project “MFC AppWizard (exe)”
- Chọn loại ứng dụng “Single document”
- Hoàn tất tạo project, biên dịch và chạy thử nghiệm chương trình
b. Phần 2:

- Thay đổi biểu tượng của chương trình
- Thay đổi con trỏ chuột
- Thay đổi nội dung của hộp thoại “About”
c. Phần 3:

- Khi user click mouse trái/phải, hiển thị dialog box thông báo:
“Ban vua nhan mouse trai [phai], tai toa do X=, Y=”


5. Một chương trình soạn thảo văn bản đơn giản
- Tạo ứng dụng MFC ở chế độ “Single document”
© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 2/7
- Khi user chọn chức năng “New” Æ tạo 1 cửa sổ soạn thảo EDIT trong vùng client
của cửa sổ giao diện chính
- Xử lý WM_SIZE để kích thước của cửa sổ soạn thảo EDIT luôn trùng khớp với
kích thước vùng client của cửa sổ giao diện chính
- Thực hiện các chức năng: Open, Save, Save as, Undo, Cut, Copy, Paste

6. Một chương trình quản lý đơn giản
- Tạo ứng dụng MFC ở chế độ “Dialog based”
- Màn hình giao diện gợi ý như hình vẽ



- Chương trình cho phép nhập và lưu thông tin lý lịch của các nhân viên. Dữ liệu
được lưu vào file nhị phân dạng record.
- Người dùng nhập thông tin chi tiết cho 1 nhân viên rồi nhấn “Lưu” để lưu record
vào file. Sau khi lưu xong, xóa các ô nhập liệu để thực hiện cho nhân viên tiếp
theo.
- Mục “Trình độ” có các lựa chọn sau: tiểu học, trung học, trung cấp, đại học, sau
đại học
- Nút “Chọn hình” mở hộp thoại cho phép chọn 1 file hình ảnh (BMP). Tên file
được thể hiện trên ô “Tên file hình”, ảnh được hiển thị trên ô trống

7. Phát triển từ bài tập 6
- Tạo ứng dụng MFC ở chế độ “Dialog based”
- Màn hình giao diện gồm 2 phần:
o Bên trái là 1 danh sách các Mã NV (đọc từ file record)
o Bên phải có giao diện giống bài tập 6

- User chọn 1 Mã NV trong danh sách, các thông tin tương ứng của NV sẽ hiển thị

Chương 2:

8. Áp dụng kỹ thuật lập trình sự kiện và kỹ thuật Hook (chặn các thông điệp) để xây dựng
chương trình “bộ gõ tiếng Việt.”
Yêu cầu:

- Chương trình chạy background, hiển thị icon ở system tray
- Hỗ trợ 1 trong các cách gõ: VNI, TELEX
- Hỗ trợ 1 trong các bảng mã: VNI, TCVN3
- Áp dụng được trong tất cả các ứng dụng trên Windows
- Chỉ nộp chương trình, không cần sưu liệu

9. Xây dựng chương trình “DateBook”. Công dụng của chương trình là cho phép ghi nhận
các việc phải làm trong ngày, nhắc nhở user khi đến thời điểm qui định.
Yêu cầu:

© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 3/7
- Chương trình chạy background, hiển thị icon ở system tray
- Khi user click lên icon của chương trình, sẽ mở giao diện hộp thoại như sau:

- Khi user click chọn 1 ngày trên lịch, chương trình sẽ mở giao diện hộp thoại quản lý
công việc như sau:

• Ngày: là ngày/tháng/năm đã chọn
• Các công việc: danh sách các công việc đã được định nghĩa trong ngày.
Thể hiện dạng ListView 2 cột. 1 cột là “Tên công việc”; 1 cột là “Thời
gian thực hiện”.
• Add: chức năng định nghĩa mới 1 công việc

• Delete: chức năng xóa bỏ 1 công việc trong danh sách.
• Close: đóng dialog

- Khi user chọn chức năng “Add”, chương trình mở dialog cho phép định nghĩa mới 1
công việc trong ngày như sau:

• Ngày: là ngày/tháng/năm đã chọn
• Giờ: user chọn giờ để thực hiện công việc
• Shutdown: tự động shutdown máy khi đến giờ qui định
© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 4/7
• Nhắc nhở: hiển thị 1 message-box với câu thông báo lên màn hình khi đến
giờ qui định, đồng thời phát 1 tiếng sound.
• OK: xác nhận công việc đã nhập
• Cancel: hủy bỏ công việc đang nhập
- Sau khi user đã định nghĩa các công việc, chương trình sẽ tự động kiểm tra và nhắc
nhở. Chu kỳ kiểm tra là 1 phút.
- Lưu trữ:
• Lưu lại tất cả công việc trong 1 tập tin, tên file do user chỉ định
• Tên file được lưu vào file WIN.INI trong section [DateBook]
• Khi user mở dialog “Quản lý công việc trong ngày”, chương trình tự động
đọc file và load tất cả các công việc của ngày đã chọn vào danh sách.
- Xây dựng các chức năng chính dưới dạng DLL, bao gồm:
• Quản lý công việc trong ngày
• Tạo mới 1 công việc trong ngày
• Shutdown hệ thống
• Hiển thị nhắc nhở
- Nộp chương trình và sưu liệu thiết kế DLL. Sưu liệu mô tả chi tiết prototype của các
hàm trong thư viện DLL, các cấu trúc dữ liệu quan trọng của chương trình.

Chương 4 & 5:


10. Xây dựng chương trình “Simple Drawing”. Chương trình cho phép user dùng mouse để
vẽ các đối tượng hình, tô màu.

Mô tả chi tiết:

Giao diện gợi ý như hình vẽ (SDI - Single Document Interface).



a. Các chức năng của chương trình bao gồm:

- File:
o New: xóa màn hình, bắt đầu vẽ mới.
o Exit: thoát chương trình
- Edit:
o Cut: cắt khu vực đang chọn, đưa vào Clipboard (dạng bitmap)
o Copy: copy khu vực đang chọn, đưa vào Clipboard (dạng bitmap)
o Paste: dán dữ liệu trong Clipboard ra màn hình, tại tọa độ (0, 0)
© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 5/7
- Drawing:
o Line: chọn chế độ vẽ đường thẳng. User dùng mouse để vẽ đoạn thẳng
o Rectangle: chọn chế độ vẽ hình chữ nhật. User dùng mouse để vẽ hình chữ
nhật
o Circle: chọn chế độ vẽ đường tròn. User dùng mouse để vẽ đường tròn.
o Select: chọn chế độ đánh dấu vùng (để Cut/Copy)
o Fill: chọn chế độ tô màu. User click mouse để chọn điểm bắt đầu tô màu.
o Line Color: mở hộp thoại Color, cho phép user chọn màu vẽ đường.
o Fill Color: mở hộp thoại Color, cho phép user chọn màu để tô.
- View:

o Toolbar: Xem/ẩn thanh ToolBar
o Statusbar: Xem/ẩn thanh StatusBar
- Help:
o About: giới thiệu về chương trình
b. Các yêu cầu khác:

- Tất cả các chức năng đều thể hiện trên ToolBar
- Mỗi chức năng đều có ToolTip Text và có hướng dẫn trên StatusBar
- Tất cả chức năng liên quan đến Clipboard (Cut/Copy/Paste) được tổ chức thành 1
DLL riêng

11. Xây dựng chương trình “Object Drawing”. Chương trình cho phép user dùng mouse để
vẽ các đối tượng hình, copy, cắt dán các đối tượng.
Mô tả chi tiết:

Giao diện gợi ý như hình vẽ (SDI - Single Document Interface).



a. Các chức năng của chương trình bao gồm:

- File:
o New: xóa màn hình, bắt đầu vẽ mới.
o Exit: thoát chương trình
- Edit:
o Cut: cắt đối tượng đang được chọn, đưa vào Clipboard (dạng object)
o Copy: copy đối tượng đang được chọn, đưa vào Clipboard (dạng object)
o Paste: dán đối tượng trong Clipboard ra màn hình, tại tọa độ (0, 0)
- Drawing:
© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 6/7

o Line: chọn chế độ vẽ đường thẳng. User dùng mouse để vẽ đoạn thẳng. Đối
tượng đường thẳng có các thuộc tính: (x1, y1), (x2, y2), nét vẽ (pen, bao gồm:
màu (color), độ rộng (thickness), dạng (style)).
o Rectangle: chọn chế độ vẽ hình chữ nhật. User dùng mouse để vẽ hình chữ
nhật. Đối tượng hình chữ nhật có các thuộc tính: (x1, y1), (x2, y2), nét vẽ
(pen, bao gồm: màu (color), độ rộng (thickness), dạng (style)), mẫu tô (brush,
bao gồm: dạng (style), màu (color), hatch).
o Ellipse: chọn chế độ vẽ đường tròn. User dùng mouse để vẽ đường tròn. Đối
tượng ellipse có các thuộc tính: (x, y), bán kính nhỏ, bán kính lớn, nét vẽ (pen,
bao gồm: màu (color), độ rộng (thickness), dạng (style)), mẫu tô (brush, bao
gồm: dạng (style), màu (color), hatch).
o Select: chuyển sang chế độ chọn đối tượng (để Cut/Copy). Đối tượng được
chọn sẽ “high-light” và user có thể dùng mouse di chuyển đối tượng.
o Settings: mở hộp thoại xác định các thuộc tính vẽ. Hộp thoại cho phép xác
định 2 loại thuộc tính sau:
 Nét vẽ (Pen): màu (color), độ rộng (thickness), dạng (style)
 Mẫu tô (Brush): dạng (style), màu (color), hatch
Các thuộc tính vẽ sẽ được áp dụng cho những đối tượng sau đó.
- View:
o Toolbar: Xem/ẩn thanh ToolBar
o Statusbar: Xem/ẩn thanh StatusBar
- Help:
o About: giới thiệu về chương trình
b. Các yêu cầu khác:

- Tất cả các chức năng đều thể hiện trên ToolBar. Toolbar không thể hiện các chức
năng không có trong yêu cầu của đề bài.
- Mỗi chức năng đều có ToolTip Text (trên Toolbar) và có hướng dẫn trên StatusBar.
- Tất cả chức năng liên quan đến Clipboard (Cut/Copy/Paste) được tổ chức thành 1
DLL riêng.


Chương 6:

12. Xây dựng chương trình “Trò chơi lật hình”. Chương trình có 1 số cặp hình giống nhau
(bị dấu). Người dùng click mouse để lật từng hình, nếu lật được 2 hình giống nhau liên
tiếp thì ghi được 1 điểm; nếu không hình sẽ trở lại trạng thái bị dấu.
Mô tả chi tiết:

- Giao diện gợi ý như hình vẽ. Thư viện các hình sử dụng có thể lấy các file ICO và
import vào chương trình sẵn.
- Màn hình bên trái dạng ListView thể hiện các hình.
- Option “Số hình”: cho phép user chọn số cặp hình muốn chơi. Không quá MAX = 10
cặp hình
- Option “Play nhạc”: cho phép play 1 file nhạc (WAV) trong lúc chơi. Nhạc bắt đầu
play khi user nhấn “New game” để bắt đầu 1 game mới.
- Option “Play 1 lần”: play xong file nhạc 1 lần rồi dừng
- Option “Play liên tục”: play liên tiếp bài nhạc cho đến khi hết game hay thoát
© Nguyen Tri Tuan – Khoa CNTT ĐH.KHTN. TP.HCM 7/7

- Option “Chọn file WAV”: cho phép user chọn file WAV để play. Tên file đã chọn thể
hiện trên mục “Tên file”
- “Kết quả” thể hiện số điểm đạt được và thời gian đã trôi qua (từ lúc bắt đầu game)
- Nút “New game” để bắt đầu 1 game mới
- Nút “Kết thúc”: thoát chương trình.
Yêu cầu:

- Khi kết thúc chương trình, tất cả các thông số đều được ghi lại vào file TCLH.INI.
File này lưu cùng thư mục với chương trình. Những thông số cần lưu gồm:
o Số hình
o Có play nhạc hay không

o Play 1 lần hay play liên tục
o Tên file WAV
o Tọa độ góc trên của cửa sổ giao diện
- Khi bắt đầu chạy, chương trình kiểm tra file TCLH.INI, nếu có thì xác lập tất cả các
thông số như đã lưu; nếu không có thì xác lập các thông số mặc định
o Số hình = 6
o Không play nhạc
o Cửa sổ giao diện hiển thị ngay chính giữa màn hình.

Hết
Bài tập c4w

1. Click chuột (I)
2. Edit (I)
3. Banh rơi (II)
4. Robot (III)
5. Đồng hồ điện tử
6. Đồng hồ kim - nhiều giao diện (IV)
7. Máy tính bỏ túi
8. Quản lý nhân viên (VI)
9. Vẽ khối 3D
10. Caro
11. WordArt
12. Paint (VIII)
13. ViêtKey

Bài tập tuần 1


Người soạn: Nguyễn Đức Hoàng Hạ

Ngày soạn: 26-2-2005
Email:


Viết chương trình từ hàm WinMain:
Đọc tập tin input.txt các thông tin:
• Dòng đầu là số n

Dòng kế tiếp có n số nguyên, mỗi số cách một khoảng trắng
Yêu cầu:
a) Tính tổng của dãy số trên và thông báo bằng MessageBox
b) Tìm phần tử lớn nhất của dãy và thông báo bằng MessageBox
c) Sắp xếp tăng dần dãy số trên rồi xuất ra tập tin output.txt như sau:

Dòng đầu là số n
• Dòng kế tiếp có n số nguyên, mỗi số cách một khoảng trắng
Sau khi ghi xong thi thông báo
“Da sap xep du lieu va ghi vao tap tin output.txt”.
d) Đếm số số nguyên tố trong dãy và thông báo kết quả bằng MessageBox
(Số nguyên tố là số nguyên lớn hơn 1 và chỉ chia hết cho 1 và chính nó)
Một số hướng dẫn:

Tạo project: File à New à (Projects) Win32 Application (Nhập tên project)
à A simple Win32 Application
• Cú pháp lệnh MessageBox:
int MessageBox(
HWND
hWnd
,
LPCTSTR lpText, //chuỗi ký tự

LPCTSTR lpCaption, //chuỗi ký tự
UINT uType
);
Xem chi tiết trong MSDN
Ví dụ cách dùng:

MessageBox(NULL,”Noi dung thong bao”, “Thong bao so 1”, MB_OK);
• Ví dụ thông báo một số nguyên x la số nguyên tố:
int x = 7;
char buf[100];
sprintf(buf,”so x=%d la so nguyen to”, x);
MessageBox(NULL, buf, “So nguyen to”, MB_OK);
(Nhớ include tập tin “stdio.h” vào để sử dụng lệnh sprintf)
• Debug:
- Chạy chương trình dạng debug: F5
- Chạy từng lệnh: F10
- Chạy vào trong hàm con: F11
- Chạy tới vị trí trỏ chuột: Ctrl+F10
- Đánh dấu vị trí dừng (Breakpoint) : F9
Một số câu hỏi:
1) Ba biến sau khác nhau như thế nào?
char * str1;
char str2[];
char str3[100];
2) Truyền tham biến và truyền tham trị khác nhau như thế nào? Cho 1 ví dụ về
kết quả chạy chương trình sẽ khác nhau nếu dùng cách truyền tham số khác
nhau.

1
Lập trình C trên Windows

Các khái niệm cơ bản
Nguyễn Tri Tuấn
Khoa CNTT – ĐH.KHTN.Tp.HCM
Email: nttuan@ fit.hcmuns.edu.vn
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 2
Nội dung
 Vài điểm khác biệt giữa lập trình Windows
và DOS
 Các thư viện lập trình của Windows
 Các loại ứng dụng
 Các khái niệm cơ bản
 Lập trình sự kiện (Even driven programming)
 Các thành phần giao diện đồ họa (GUI)
 Tài nguyên của ứng dụng (Resources)
 Một chương trình tổng quát xây dựng trên
Win32 API
 Các kiểu dữ liệu cơ bản
2
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 3
Vài điểm khác biệt giữa lập trình Windows và DOS
Không cóHỗ trợ nhiều công nghệ
DLL, OLE, DDE, COM,
OpenGL, DirectX, …
Ứng dụng 16 bitsHỗ trợ 32 bits hay hơn nữa
Phải dùng các thư viện
Multimedia riêng
Tích hợp sẵn Multimedia
Single CPUMulti- CPU
Single taskMulti- tasking
Thực hiện tuần tự theo chỉ

định
Lập trình sự kiện, dựa vào
thông điệp (message)
DOSWindows
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 4
Các thư viện lập trình của Windows
 SDK - Software Development Kit
 Là bộ thư viện lập trình nền tảng của HĐH
Windows
 Cung cấp tất cả các công cụ cần thiết để xây
dựng 1 ứng dụng trên Windows
 Được sử dụng như là thư viện cơ sở để tạo ra
những thư viện cấp cao hơn trong những ngôn
ngữ lập trình. VD. OWL của BorlandC, MFC của
Visual C++,…
3
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 5
Các thư viện lập trình của Windows …(tt)
 Một số thành phần tiêu biểu của SDK:
 Win32 API
 GDI/GDI+
 Windows MultiMedia
 OpenGL
 DirectX
 COM/COM+
 ADO (ActiveX Data Object)
 OLE DB
 …
Xem thêm MSDN/Platform SDK Documentation/Getting
started/Content of Platform SDK

Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 6
Các thư viện lập trình của Windows …(tt)
 OWL - Object Windows Library
 Là bộ thư viện hướng đối tượng của
BorlandC++
 MFC - Microsoft Foundation Classes
 Là bộ thư viện hướng đối tượng của Visual C++
 Một ứng dụng trên Windows có thể được
viết bằng
 Thư viện SDK
 Một thư viện khác (OWL, MFC,…) phối hợp với
SDK
4
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 7
Các loại ứng dụng
 Win32 Console: ứng dụng 32 bits, với giao diện
dạng DOS command line
 Win32 (SDK): ứng dụng 32 bits, chỉ sử dụng thư
viện SDK
 Win32 DLL: ứng dụng 32 bits, dạng thư viện liên
kết động (Dynamic-linked library), sử dụng SDK
 Win32 LIB: ứng dụng 32 bits, dạng thư viện liên
kết tĩnh (Static-linked library)
 MFC EXE: ứng dụng 32 bits, sử dụng thư viện
Microsoft Foundation Class
 MFC DLL: ứng dụng 32 bits, dạng thư viện liên kết
động (Dynamic-linked library), sử dụng MFC
 …
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 8
Các khái niệm cơ bản

 Handle:
 Một giá trị 32 bits không dấu (unsigned) do HĐH tạo ra
để làm định danh cho 1 đối tượng (cửa sổ, file, vùng
nhớ, menu,…)
 ID (Identifier):
 Một giá trị nguyên do ứng dụng tạo ra để làm định danh
cho 1 đối tượng (menu item, control)
 Instance:
 Một giá trị nguyên do HĐH tạo ra để định danh 1 thể
hiện đang thực thi của ứng dụng
 Callback:
 Thuộc tính của 1 hàm/thủ tục sẽ được gọi bởi HĐH,
không phải bởi ứng dụng
5
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 9
Lập trình sự kiện (Even driven programming)
Phát sinh các sự kiện và thông điệp
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 10
Lập trình sự kiện (Even driven programming)…(tt)
Qui trình xử lý thông điệp
6
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11
Lập trình sự kiện (Even driven programming)…(tt)
// Vòng lặp xử lý thông điệp trong 1 ứng dụng –
// Message loop
MSG msg;
// lấy thông điệp ra khỏi hàng đợi của ứng dụng
while (GetMessage(&msg, NULL, 0, 0))
{
// chuyển đổi các phím ảo (virtual key) thành các thông điệp ký tự

TranslateMessage(&msg);
// chuyển message đến hàm xử lý thông điệp của cửa
// sổ tương ứng
DispatchMessage(&msg);
}
return msg.wParam;
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 12
Các thành phần giao diện đồ họa (GUI)
 Các dạng GUI cơ bản
 Cửa sổ
 Định nghĩa
 Nguyên tắc quản lý
 Phân loại
 Lớp cửa sổ (window class)
 Hàm xử lý thông điệp (window procedure)
 Các thuộc tính
7
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 13
Các thành phần giao diện đồ họa (GUI)…(tt)
 GUI: Graphics User Interface
 Các dạng GUI cơ bản:
 SDI - Single Document Interface
 Một cửa sổ làm việc
 Cho phép thay đổi kích thước cửa sổ (Resizeable)
 Không có các cửa sổ con
 Ví dụ: NotePad, Paint,…
 MDI - Multiple Document Interface
 Một cửa sổ làm việc chính (Frame window) và nhiều cửa sổ con (Child
window)
 Cho phép thay đổi kích thước cửa sổ (Resizeable)

 Cho phép Maximize/Minimize/Close các cửa sổ con
 Ví dụ: Word, Excel, VC++,…
 Dialog
 Một cửa sổ làm việc
 Thường kích thước cố định
 Thường không có menu bar
 Thường có các button, edit box, list-box,…
 Ví dụ: Calculator, CD Player,…
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 14
Các thành phần giao diện đồ họa (GUI)…(tt)
Dialog, SDI, MDI
8
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 15
GUI – Window …(tt)
 Định nghĩa:
 là 1 vùng chữ nhật trên màn hình,
 dùng để hiển thị kết quả output,
 và nhận các input từ người dùng
¾ Công việc đầu tiên của 1 ứng dụng GUI là tạo 1
cửa sổ làm việc
 Nguyên tắc quản lý:
 Mô hình phân cấp: mỗi cửa sổ đều có 1 cửa sổ
cha (parent window), ngoại trừ cửa sổ nền
Desktop
 Tại mỗi thời điểm, chỉ có 1 cửa sổ nhận input từ
user (Active/Focused window)
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 16
GUI – Window …(tt)
 Phân loại:
 Cửa sổ Desktop

 Cửa sổ tiêu chuẩn
 Cửa sổ hộp thoại (Dialog box)
 Các control
9
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17
GUI – Window …(tt)
App
Window
Dialog
box
Desktop
Window
Control
Child
window
Parent
window
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 18
GUI – Window …(tt)
Title-
bar
Minimized,
Restored,
Maximized
buttons
Scroll-
bar
Menu-
bar
Resized

border
Window
Caption
Window
Icon
Tool-bar
Client Area
Status-bar
Các thành phần của 1 cửa sổ tiêu chuẩn
10
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19
GUI – Window …(tt)
Static-
Text
Drop-down
List
Combo-
box
(Edit-text
+ List-
box)
Push-
button
Property-
sheet
Check-
box
Các dạng control
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 20
GUI – Window …(tt)

Các dạng control

×