BÀI GIẢNG
LẬP TRÌNH C TRÊN WIN
Lương Văn Vân
Khoa cơng nghệ thông tin
MỘT SỐ TIÊU ĐIỂM CỦA MƠN HỌC
Lập trình C trên Windows
Tổng số tiết:
Lý thuyết:
Bài tập:
Thực hành:
Sinh viên cần phải được học trước các mơn
Lập trình C
Thi kết thúc mơn học bằng hình thức thi
thực hành.
Khoa cơng nghệ thông tin
105 tiết
45 tiết
0 tiết
60 tiết
2
TÀI LIỆU THAM KHẢO
Lập trình C trên Windows
1. Lập trình WinDows bằng Visual C++, Đặng
Văn Đức – Lê Quốc Hưng, NXB Giáo dục, 2001.
2. Lập trình C trên Win, Đặng Văn Đức, Nhà
xuất bản Khoa học kỹ thuật, 1998.
3. Bài giảng Lập trình C trên Windows.
4. www.codeproject.com, www.codeguru.com
Khoa cơng nghệ thông tin
3
NỘI DUNG
Lập trình C trên Windows
1
TỔNG QUAN LẬP TRÌNH C TRÊN WIN
2
HỘP THOẠI VÀ THANH TRÌNH ĐƠN
3
CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN
4
XỬ LÝ BÀN PHÍM, CHUỘT VÀ TIMER
5
XỬ LÝ VĂN BẢN VÀ FONT CHỮ
6
ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI
Khoa công nghệ thông tin
4
Chương 1: TỔNG QUAN LẬP TRÌNH C TRÊN WINDOWS
Lập trình C trên Windows
Mở đầu
Hệ điều hành Microsoft Windows
Lập trình trên Microsoft Windows
Cách viết một ứng dụng trên MS Windows
Khoa công nghệ thông tin
1.1: MỞ ĐẦU
Lập trình C trên Windows
Các ứng dụng của Windows rất dễ sữ dụng,
nhưng rất khó đối với người tạo lập ra
chúng.
Lập trình trên Windows khó và phức tạp hơn
nhiều so với lập trình trên Dos.
Windows cung cấp các hàm để người lập
trình thâm nhập các đặc trưng của hệ điều
hành gọi là giao diện lập trình ứng dụng
(API). Những hàm này đặt trong các thư viện
liên kết động (.DLL).
Khoa công nghệ thông tin
6
1.2: HỆ ĐIỀU HÀNH MICROSOFT WINDOWS
Lập trình C trên Windows
Hệ điều hành Windows giao tiếp với người sử dụng
bằng mơi trường đồ họa (graphic).
Windows là hệ thống đa nhiệm cho phép nhiều ứng
dụng cùng thi hành đồng thời
Windows cho phép chạy một ứng dụng mà mã của
nó lớn hơn bộ nhớ hiện có nhờ vào cơ chế bộ nhớ ảo.
Windows cung cấp cơ chế thư viện liên kết động
Hàng đợi nhập dữ liệu
Khoa công nghệ thông tin
7
1.3: LẬP TRÌNH TRÊN MICROSOFT WINDOWS
Lập trình C trên Windows
Cơ chế lập trình trong Windows: Một chương trình
ứng dụng người lập trình phải xây dựng, khai báo, kế thừa
các tài nguyên về giao diện.
Cửa sổ:
Thực đơn
Hộp hội thoại
Khoa công nghệ thông tin
8
1.3: LẬP TRÌNH TRÊN MICROSOFT WINDOWS
Lập trình C trên Windows
Sự khác biệt so với lập trình trên MS-Dos
Khoa cơng nghệ thông tin
9
1.3: LẬP TRÌNH TRÊN MICROSOFT WINDOWS
Lập trình C trên Windows
Cơ chế thông điệp:
Khoa công nghệ thông tin
10
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Các thành phần cơ bản tạo nên ứng dụng
Chương trình nguồn:
Bao gồm các tập tin *.C và *.H tương tự như các chương
trình trong C chuẩn cho DOS. Tuy nhiên trong đó là các
cấu trúc đặc thù cho Windows
Tập tin *.H để định nghĩa các hằng số, khai báo biến, khai
báo hàm,...
Khoa công nghệ thông tin
11
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Tập khai báo tài nguyên :
Tất cả các tài ngun được mơ tả tóm tắt trong tập tin có tên phụ là
*.RC
Tài nguyên cho một ứng thường bao gồm :
• Biểu tượng của ứng dụng (Icon)
• Con trỏ màn hình(cursor)
• Các hình ảnh (bitmap)
• Hộp hội thoại (Dialog)
• Khai báo control
• Menu cho ứng dụng
Khoa cơng nghệ thơng tin
12
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Tập
Các thuộc tính chẳng hạn như kích thước stack, kích
thước heap,.... được khai báo trong tập tin .DEF. Nếu
khơng có chương trình ứng dụng cài đặt giá trị mặc
định.
Tập
tin khai báo các thuộc tính cho ứng dụng
tin đề án :
Tên_Dự_án.DSW (*.DSW)
Khoa công nghệ thông tin
13
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Hàm WinMain
int WINAPI WinMain ( HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int
nCmdShow)
hInstance chỉ danh của instance hiện hành
hPrevInstance chỉ danh của instance vừa chạy lần trước. Nếu có
thì tham số khác khơng , nếu tham số bằng 0 thì hInstance là
instance đầu tiên của ứng dụng.
lpszCmdLine : câu lệnh gọi từ chức năng Run trong thực đơn File
của Program Manager, giống như đối số argc của hàm main()
trong C chuẩn và có kiểu char far * (LPSTR).
nCmdShow : Qui định cách thức thể hiện window của ứng dụng
Khoa công nghệ thông tin
14
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Các
thành phần của hàm WinMain
Đăng ký lớp cửa sổ:
WNDCLASS wndclass; // biến để định nghĩa một cửa sổ
// Định nghĩa kiểu cửa sổ
wndclass.style = SC_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc; // Hàm thủ tục cửa sổ
wndclass.cbClsExtra = 0;//Giá trị mở rộng của lớp
wndclass.cbWndExtra = 0;//
Khoa công nghệ thông tin
15
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
//
Định nghĩa kiểu cửa sổ
(tt):
wndclass.hInstance = hInstance; // Định danh ứng dụng
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCusor (NULL, IDC_ARROW);
wndclass.hbrBackground =
(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL; // Khơng có menu
wndclass.lpszClassName = szAppName; // tên ứng dụng
Khoa công nghệ thông tin
16
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
// Đăng ký lớp cửa sổ
if (!RegisterClass(&wndclass)) return 0
Khoa công nghệ thông tin
17
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
// Tạo lập cửa sổ
hwnd = CreateWindow (szAppName, // Tên cửa sổ
"Hello Program", // Tiêu đề
WS_OVERLAPPEDWINDOW, // Kiểu cửa sổ
CW_USEDEFAULT, // Tọa độ x
CW_USEDEFAULT, // Tọa độ y
CW_USEDEFAULT, // Chiều rộng
CW_USEDEFAULT, // Chiều dài
NULL, // Cửa sổ cha
NULL, // Khơng có menu
hInstacne, // Định danh ứng dụng
NULL); // Tham số bổ sung
Khoa công nghệ thông tin
18
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
// Hiển thị cửa sổ
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
Khoa công nghệ thông tin
19
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
// Chu trình xử lý các thơng điệp
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
Khoa công nghệ thông tin
20
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Hàm window (window function)
Một ứng dụng giao tiếp với người sử dụng qua một hay nhiều
window, mỗi window trong ứng dụng được kết hợp với một
window function.
Nhiệm vụ của hàm window là xử lý các message do hệ điều
hành Windows hay WinMain gởi tới.
Một ứng dụng viết trên Windows không bao giờ gọi trực tiếp
window function.
LRESULT CALLBACK WndProc(HWND hWnd, UINT
Message,WPARAM wParam, LPARAM lParam);
Khoa công nghệ thông tin
21
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
/*Xử lý các thông điệp cần thiết với ứng dụng*/
case WM_CREATE:
/*Viết đoạn mã khi tạo cửa sổ*/
return 0;
case WM_PAINT:
/*Viết đoạn mã khi tô vẽ lại cửa sổ*/
return 0;
case WM_SIZE:
/*Viết đoạn mã khi kích thước cửa sổ thay đổi*/
return 0;
case WM_DESTROY:
/*Cửa sổ bị đóng*/
PostQuitMessage (0);
return 0;
Khoa cơng nghệ thơng tin
22
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Thông điệp WM_DESTROY
Thông điệp này chỉ định rằng Windows đang trong quá trình
hủy một cửa sổ khi người sử dụng click vào nút close button
hay chọn close trong thực đơn hệ thống.
Thông điệp này được Windows gởi đến hàm window thông
qua tham số Message của hàm window.
Xử lý thông thường của thơng điệp này là kết thúc chương
trình bởi vì người sử dụng huỷ bỏ cửa sổ chính. Để kết thúc
chương trình gọi hàm PostQuitMessage(0), hàm này gởi đi
thơng điệp WM_QUIT làm cho message loop kết thúc.
Khoa công nghệ thông tin
23
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Thông điệp WM_CREATE
Hàm window nhận được thông điệp này khi Windows đang xử
lý hàm CreateWindow trong hàm WinMain, tức là lúc chương
trình mới bắt đầu.
Thơng điệp này gởi đến hàm window qua thông số Message
của hàm window.
Thông điệp gởi đi khi chương trình mới bắt đầu do đó việc xử
lý message là thường khởi động các giá trị ban đầu của chương
trình ứng dụng.
Khoa cơng nghệ thơng tin
24
1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS
Lập trình C trên Windows
Thông điệp WM_PAINT
Thông điệp WM_PAINT được phát đi khi một phần hay tất cả
vùng client (vùng làm việc của cửa sổ) bị không hợp lệ và cần
cập nhật, vẽ lại.
Một vùng client không hợp lệ khi cửa sổ đầu tiên được tạo ra,
khi người sử dụng thay đổi kích thước cửa sổ, khi người sử
dụng di chuyển các cửa sổ xung quanh màn hình để chúng xếp
chồng lên nhau Windows không lưu các vùng cửa sổ chị che
nên khi khơng bị che thì chúng bị bất hợp lệ.
Thơng điệp này được gởi qua thông số Message của hàm
window và việc xử lý thông điệp này luôn bắt đầu bằng hàm
BeginPaint, và kết thúc bằng EndPaint.
Khoa công nghệ thông tin
25