
1
TRƯỜNG ĐẠI HỌC B\CH KHOA H[ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN V[ TRUYỀN THÔNG
Phạm Ngọc Hưng
Bộ môn Kỹ thuật Máy tính
hungpn@soict.hut.edu.vn
LẬP TRÌNH WINDOWS
Lập trình Windows
•Mã số: IT4781
•Thời lượng: 2 (2-1-0-4)
–Lý thuyết: 30 tiết
–Bài tập: 15 tiết
•Học phần tiên quyết:
–Ngôn ngữ lập trình C, C++
2
Lập trình Windows
Nội dung
•Chương 1. Tổng quan lập trình Windows (4LT +
1BT)
•Chương 2. Lập trình Windows VC++/MFC (15LT +
6BT)
•Chương 3. Một số chủ đề nâng cao
–Tạo thư viện liên kết động (DLL) (3LT + 2BT)
–Luồng (Thread) (3LT + 2BT)
–Windows Socket (2LT + 2BT)
•Chương 4. X}y dựng ứng dụng Windows Form (3LT
+ 2BT)
•Bài tập lớn
3
Lập trình Windows
Tài liệu tham khảo
•1. Ivor Horton’s, Beginning Visual C++ 2010
•2. Programming Windows with MFC 2nd
•2. VC++ and MFC Programming 2nd
•3. Sams teach yourself VC++ 6 in 21 days
•4. MSDN
•5. http://www.functionx.com/visualc/
4
Lập trình Windows

2
Chương 1. Tổng quan lập trình Windows
•1.1. Cơ bản về lập trình Windows (1T)
•1.2. Cấu trúc của chương trình Windows (2T)
•1.3. Microsoft Foundation Classes (MFC)
•1.4. Lập trình Windows với VC++ 2008
(1LT + 1BT)
5
Lập trình Windows
1.1. Cơ bản về lập trình Windows
•Windows: đồ họa trực quan, tài nguyên đa
dạng.
•Ứng dụng thân thiện với người sử dụng
thông qua giao diện đồ họa Windows.
•Các ứng dụng có giao diện tương tác giống
nhau:
–Windows, title bar, toolbar, menu bar, status bar
–Thanh thực đơn: File, Edit, Tool, Help…
–Hộp thoại: thường chứa các điều khiển chung: Edit
Control, Button Control, Checkbox….
6
Lập trình Windows
Các thành phần của một cửa sổ
7
Lập trình Windows
Cơ chế lập trình Event-driven
8
Lập trình Windows

3
Thông điệp (Windows Messages)
•Hệ thống (Windows) ghi lại mỗi sự kiện xảy ra
(event) trong một thông điệp (message) và đặt
trong hàng đợi thông điệp (messages queue)
•Thông điệp phát sinh:
–Từ hệ thống (Windows OS)
–Từ ứng dụng
•Ví dụ: click/drag chuột, ấn phím,
minimize/maximize/close cửa sổ, thay đổi kích
thước cửa sổ, …
9
Lập trình Windows
Windows Message (cont.)
•HĐH Windows đảm nhiệm việc truyền tất cả các
thông điệp của ứng dụng vào các cửa sổ khác nhau
của ứng dụng đó.
•Một chương trình Windows phải chứa một hàm
đặc biệt để xử lý các thông điệp gọi là hàm xử lý
cửa sổ WinProc (hoặc WindowProc):
–Được gọi khi có bất kỳ thông điệp được truyền
đến cửa sổ (thông qua con trỏ hàm)
–Xử lý các thông điệp đó và trả điều khiển về cho
hệ thống.
•Nhiều thông điệp trả lại cho Windows xử lý, gọi
hàm DefWindowProc( ) 10
Lập trình Windows
Windows Message (cont.)
11
Lập trình Windows
Windows API
•Application Programming Interface: Giao
diện lập trình ứng dụng
•Cung cấp các hàm truy cập tài nguyên trong
hệ thống (Windows) chứa trong các thư viện
liên kết động DLL.
•Các ứng dụng có thể truy cập đến các hàm
API
•Các hàm GDI (Graphics Device Interface) cho
phép ứng dụng làm việc với nhiều kiểu thiết
bị đồ họa.
12
Lập trình Windows

4
Windows Data Types (1)
•Định nghĩa nhờ từ khóa typedef trong các tập tin (windef.h;
winbase.h, winuser.h được include trong windows.h).
•Ví dụ:
–typedef int INT;
–typedef unsigned int UINT;
–char * PSTR
•WPARAM (UINT) và LPARAM (LONG) đều 32 bit
•LRESULT: kiểu LONG
•HANDLE: Một gi| trị 32bits không dấu (unsigned) do HĐH
tạo ra để l{m định danh cho 1 đối tượng (file, cửa sổ, vùng
nhớ, menu, toolbar…). Ví dụ : HWND, HINSTANCE,
hPrevInstance
13
Lập trình Windows
Windows Data Types (2)
Kiểu
Ý nghĩa
HANDLE
Số nguyên 32-bit, định danh.
HWND
Số nguyên 32-bit, định danh.
BYTE
Giá trị 8-bit không dấu.
WORD
Số nguyên 16-bit không dấu.
DWORD
Số nguyên 32-bit không dấu.
UINT
Số nguyên không dấu 32-bit.
LONG
long 32-bit.
BOOL
Kiểu logic True/False
LPSTR
Con trỏ chuỗi. (char *)
LPCSTR
Hằng con trỏ chuỗi.
WPARAM
32-bit.
LPARAM
32-bit.
BSTR
Giá trị 32-bit trỏ đến kí tự.
LPVOID
Con trỏ 32-bit đến một kiểu không xác định.
LPTSTR
Giống như LPSTR nhưng có thể chuyển sang dạng Unicode và
DBCS.
LPCTSTR
Giống như LPCTSTR nhưng có thể chuyển sang dạng Unicode và
DBCS.
14
Lập trình Windows
Microsoft style (1)
•Tất cả c|c kiểu dữ liệu mở rộng của windows , tên class, tên
struct, tên hằng số định sẵn đều được viết in hoa
Ví dụ :
Tên kiểu dữ liệu : UINT , ATOM , HANDLE, HWND, BYTE,….
Tên cấu trúc : MSG, PAINSTRUCT, WNDCLASS ,....
Tên hằng số định sẵn : NULL, IDI_APPLICATION,
CS_VREDRAW,…..
•Tất cả c|c method (c|c h{m, c|c phương thức) đều được viết
hoa (pascal notation).
Ví dụ :
LoadIcon(…)
LoadCursor(…)
SomeOtherName(…)
15
Lập trình Windows
Microsoft Style (2)
•Qui ước: bắt đầu (tiền tố) chữ thường thể
hiện kiểu dữ liệu biến.
•Ví dụ: szCmdLine là một biến lưu chuỗi nhập
từ dòng lệnh, sz là thể hiện cho biến kiểu
chuỗi kết thúc ký tự 0,
•hInstance và hPrevInstance, trong đó h viết
tắt cho kiểu handle.
16
Lập trình Windows

5
Microsoft Style (3) – Tiền tố tên biến
Tiền tố
Kiểu dữ liệu
c
char, WCHAR, TCHAR
by
BYTE
n
short
i
int
x,y
biến lưu tọa độ x, y
b
BOOL
w
WORD
l
long
dw
DWORD
s
string
sz
chuỗi kết thúc bởi kí tự 0
h
handle
p
pointer
Lpsz
con trỏ dài chuỗi ký tự kết thúc kí tự 0
17
Lập trình Windows
Microsoft style (4) - Calling convention
•Định nghĩa kiểu h{m gọi bởi Windows OS
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
•Thêm vào trước tên hàm để chỉ ra cho
compiler rằng hàm này có cách tổ chức phục
vụ cho việc gọi đến như thế nào.
18
Lập trình Windows
1.2. Cấu trúc của chương trình Windows
19
Lập trình Windows
1.2. Cấu trúc của chương trình Windows
•Chương trình Windows đơn giản (dùng hàm API)
gồm 2 hàm WinMain() và hàm xử lý cửa sổ
WinProc().
•WinMain() thực hiện các chức năng:
–Tell Windows what kind of window the program requires
–Create the program window
–Initialize the program window
–Retrieve Windows messages intended for the program
•WinProc(): xử lý các thông điệp liên quan đến cửa
sổ của nó.
20
Lập trình Windows