Báo cáo bài tập lớn môn Hệ điều hành: Tìm hiểu lập trình API trong Window có kết cấu nội dung gồm 3 phần. Trong đó, phần mở đầu giới thiệu chung, phần 2 giới thiệu sơ lược về Window API, phần 3 đề cập đến một số thành phần cơ bản của ứng dụng.
Trang 2M c l c ụ ụ
Mục lục 2
I.MỞ ĐẦU: 2
II, SƠ BỘ WINDOW API, CÁCH THỨC LÀM VIỆC 4
1 Các thư viện lập trình của Windows SDK – Software Development Kit: 4
2 Các khái niệm cơ bản: 4
3 Các thành phần giao diện đồ họa (GUI – Graphics User Interface) 5
4 Qui trình hoạt động của chương trình ứng dụng: 6
5 Ví dụ 6
III, MỘT SỐ THÀNH PHẦN CƠ BẢN 12
1 Tài nguyên của ứng dụng (Resources) 12
2 Một số kiểu dữ liệu mới: 13
3 Một số hàm đồ họa cơ sở: 15
4.HỘP THOẠI VÀ ĐIỀU KHIỂN 17
IV.Kết luận 21
I.M Đ U: Ở Ầ
Trang 3Cá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. Đ đ t đạ ậ ể ạ ược tính d dùng đòi h i ngễ ỏ ườ ậi l p trình
ph i b ra r t nhi u công s c đ cài đ t. ả ỏ ấ ề ứ ể ặ
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. Tuy nhiên l p trình trên Windows s gi i quy t đậ ẽ ả ế ược m t s v nộ ố ấ
đ khó khăn trong môi trề ường DOS nh xây d ng giao di n ngư ự ệ ười dùng,
qu n lý b nh o, đ c l p thi t b vào ra, thâm nh p Internet, kh năng chiaả ộ ớ ả ộ ậ ế ị ậ ả
s tài nguyên, ẻ
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 (Applicationư ủ ệ ề ọ ệ ậ ứ ụ Programming Interface – API). Nh ng hàm này đữ ược đ t trong các th vi nặ ư ệ liên k t đ ng (Dynamic Link Library – DLL). Các chế ộ ương trình ng d ng sứ ụ ử
d ng chúng thông qua các l i g i hàm và ch chia s đụ ờ ọ ỉ ẻ ược khi trong máy có cài đ t Windows. ặ
Trang 4II, S B WINDOW API, CÁCH TH C LÀM VI C Ơ Ộ Ứ Ệ
Đượ ử ục s d ng nh là th vi n c s đ t o ra nh ng th vi n caoư ư ệ ơ ở ể ạ ữ ư ệ
c p h n trong nh ng ngôn ng l p trình. VD: OWL c a BorlandC, MFC c aấ ơ ữ ữ ậ ủ ủ Visual C++,…
Trang 5Instance: 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ọ ở
+ 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 – Multi 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. ử ổ
vi c. ệ
Trang 64. Qui trình ho t đ ng c a chạ ộ ủ ương trình ng d ngứ ụ :
C a s đử ổ ược hi n th lên màn hình. ể ị
L p trình trên Windows là l p trình trên c s thông đi p, quá trình traoậ ậ ơ ở ệ
đ i thông tin và đi u khi n d a trên thông đi p. Có r t nhi u thông đi pổ ề ể ự ệ ấ ề ệ
được phát sinh ng u nhiên nh nh n phím hay chu t, ch n menu, ẩ ư ấ ộ ọ
Tương tác c a ng d ng v i ngủ ứ ụ ớ ườ ử ụi s d ng thông qua m t hay nhi uộ ề
c a s , t o l p các c a s khi c n thi t và qu n lý thông tin trong đó. ử ổ ạ ậ ử ổ ầ ế ả
5. Ví dụ
#include <windows.h>
LRESULT CALLBACK XulyMessage (HWND,UNIT,WPARAM,LPARAM); char szAppName [ ] = “Vidu”;
int WINAPI WinMain (HANDLE hInst, HANDLE hPrevInst,
LPSTR lpszCmdLine, int nCmdShow) {
HWND hwnd; MSG msg;
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
Trang 7break;
Trang 8nh Do v y, nguyên t c l p trình trên Windows ch y u là sao chép và ch nhớ ậ ắ ậ ủ ế ỉ
s a nh ng n i c n thi t d a vào m t chử ữ ơ ầ ế ự ộ ương trình m u có s n.ẫ ẵ
a. Hàm WinMain() được th c hi n đ u tiên hay còn g i là đi m vào c aự ệ ầ ọ ể ủ
chương trình.
Ta th y hàm này có 4 tham s : ấ ố
+ hInst, hPrevinst: Ch s chỉ ố ương trình khi chúng đang ch y. Vìạ Windows là h đi u hành đa nhi m, có th có nhi u b n c aệ ề ệ ể ề ả ủ cùng m t chộ ương trình cùng ch y vào cùng m t th i đi m nênạ ộ ờ ể
ph i qu n lý ch t ch chúng. hInst là ch s b n chả ả ặ ẽ ỉ ố ả ương trình
v a kh i đ ng, hPrevinst là ch s c a b n đã đừ ở ộ ỉ ố ủ ả ược kh i đ ngở ộ
trước đó và chúng luôn có giá tr NULL. ị+ lpszCmdLine: ch a đ a ch đ u c a xâu ký t các đ i s dòngứ ị ỉ ầ ủ ự ố ố
l nh. ệ+ nCmdShow: Cho bi t cách th c hi n th c a s khi chế ứ ể ị ử ổ ương trình
kh i đ ng. Windows có th gán giá tr SW_SHOWNORMALở ộ ể ị hay SW_SHOWMINNOACTIVE.
Các tham s trên do h đi u hành truy n vào. ố ệ ề ề
Đ nh nghĩa l p c a s và đăng ký v i Windows ị ớ ử ổ ớ
+ L p c a s (window class): Là m t t p các thu c tính mà HĐHớ ử ổ ộ ậ ộ Windows s d ng làm khuôn m u (template) khi t o l p c a s M i l pử ụ ẫ ạ ậ ử ổ ỗ ớ
c a s đử ổ ược đ c tr ng b ng 1 tên (classname) d ng chu i. ặ ư ằ ạ ỗ
Phân lo i class: ạ
L p c a s c a h th ng (System class): Đớ ử ổ ủ ệ ố ược
đ nhnghĩa trị ước b i HĐH Windows. Các ng d ng không th ở ứ ụ ể
h y b ủ ỏ
Trang 9 L p c a s do ng d ng đ nh nghĩa: Đớ ử ổ ứ ụ ị ược đăng ký b i ở
ng d ng. Có th h y b khi không còn s d ng n a
L p toàn c c c a ng d ng (Application global class).ớ ụ ủ ứ ụ
L p c c b c a ng d ng (Application local class).ớ ụ ộ ủ ứ ụ
M i c a s đ u thu c m t l p xác đ nh. ỗ ử ổ ề ộ ộ ớ ị
Khi l n đ u ch y, ng d ng ph i đ nh nghĩa và đăng ký l p v i c aầ ầ ạ ứ ụ ả ị ớ ớ ử
s (Window Class). Đây là c u trúc d li u mô t tính ch t c a c a s , l nổ ấ ữ ệ ả ấ ủ ử ổ ầ
lượt ta gán các giá tr ban đ u cho các thành ph n c a c u trúc l p c a s ,ị ầ ầ ủ ấ ớ ử ổ bao g m: Kích thồ ước, ki u, đ a ch hàm x lý thông đi p c a s , đ nh nghĩaể ị ỉ ử ệ ử ổ ị hình d ng cho con tr chu t (cursor) và bi u tạ ỏ ộ ể ượng (Icon), màu n n, tên l pề ớ
+ Sau khi đã đ nh nghĩa các thành ph n l p c a s ta ph i đăng kýị ầ ớ ử ổ ả
l p c a s v i h đi u hành (RegisterClassEX). ớ ử ổ ớ ệ ề
ATOM RegisterClassEx (CONST WNDCLASSEX *lpWClass);
v i: Ki u giá tr c a ATOM đớ ể ị ủ ược đ nh nghĩa trong window.h làị WORD; lpWClass là con tr đ n c u trúc l p c a s ; hàm nàyỏ ế ấ ớ ử ổ
tr v ch s c a l p c a s ả ề ỉ ố ủ ớ ử ổ+Có hai nguyên nhân d n đ n vi c đăng ký c a s th t b i: ẫ ế ệ ử ổ ấ ạ
Trùng tên gi a các ng d ng trong h đi u hành. ữ ứ ụ ệ ề
Không đ b nh ủ ộ ớ + T o l p c a s làm vi c (Frame Window) ạ ậ ử ổ ệ
Sau khi đăng ký thành công ta có th t o l p c a s thông quaể ạ ậ ử ổ
hàm CreateWindow(). HWND CreateWindow (
LPCSTR lpClassName, LPCSTR lpWinName, DWORD dwStyle, int X, int Y,
Trang 10int Width, int Height, HWND hParent, HMENU hMenu, HINSTANCE hInst, LPVOID lpszAdditional);
G i hàm ShowWindow()đ hi n th c a s BOOLọ ể ể ị ử ổ ShowWindow (HWND hwnd, int nShow);
v i: hwnd ch s c a s c n hi n th ớ ỉ ố ử ổ ầ ể ị
nShow cách th c hi n th c a c a s , tham s này đứ ể ị ủ ử ổ ố ược nh nậ giá tr l n đ u tiên c a hàm WinMain() ị ầ ầ ủ
Đ thông báo cho ng d ng bi t là ph i v l i vùng làm vi cể ứ ụ ế ả ẽ ạ ệ
c a c a s , ta ph i g i hàm UpdateWindow() yêu c u Windowsủ ử ổ ả ọ ầ
g i thông đi p đ n hàm x lý thông đi p c a s ử ệ ế ử ệ ử ổ
+ Vòng l p thông đi p ặ ệ
Khi nh n phím hay chu t, Windows chuy n đ i s ki n nàyấ ộ ể ổ ự ệ thành các thông đi p và đ t vào hàng đ i thông đi p. Vòng l pệ ặ ợ ệ ặ thông đi p có nhi m v nh n và x lý các thông đi p trongệ ệ ụ ậ ử ệ hàng đ i. ợ
TranslateMessage: D ch thông đi p sang d ng tiêu chu n. ị ệ ạ ẩ
DispatchMessage: Phân ph i thông đi p đ n hàm x lý thôngố ệ ế ử
đi p tệ ương ng. ứ
b. Th t c x lý thông đi p ủ ụ ử ệ
+ Nh n và x lý thông đi p c a chậ ử ệ ủ ương trình.
+ M t chộ ương trình có th có nhi u th t c window. ể ề ủ ụ
+ M t l p c a s s khai báo 1 th t c window. ộ ớ ử ổ ẽ ủ ụ
+ Các thông đi p sau khi x lý nên tr v giá tr 0. ệ ử ả ề ị
+ D ng t ng quát: ạ ổ
LRESULT CALLBACK WndProc(
HWND hWnd, //handle c a window nh n message ủ ậ
UINT message, //ID c a thông đi p (tên thông đi p) ủ ệ ệ
WPARAM wParam, //thams th nh t c a message (WORD) ố ứ ấ ủLPARAM lParam) //thams th hai c a message (LONG) ố ứ ủ
Trang 11}
Thông đi p WM_PAINT: ệ
C p nh t l i thông tin v trên màn hình ậ ậ ạ ẽ
Các tr ng thái xu t hi n thông đi p WM_PAINT:ạ ấ ệ ệ
i. T o c a s Hi n th C p nh t ạ ử ổ ể ị ậ ậ
BeginPaint: L y ng c nh thi t b ấ ữ ả ế ị
EndPaint: Gi i phóng ng c nh thi t b ả ữ ả ế ị
Trang 12III, M T S THÀNH PH N C B N Ộ Ố Ầ Ơ Ả
1. Tài nguyên c a ng d ng (Resources) ủ ứ ụ
+ Là 1 đ i tố ượng (object) được s d ng trong ng d ng (VD: menuử ụ ứ ụ bar, dialog, bitmap, icon, cursor, …).
+ Được đ nh nghĩa bên ngoài và đị ược thêm vào trong file thi hành c aủ
ng d ng khi biên d ch (linking).
+ Các d ng resource: ạ
Trang 132. M t s ki u d li u m i:ộ ố ể ữ ệ ớ
Trang 15V m t đi m màu clrRef t i v trí (nXPos, nYPos) lên hDC. Giá tr tr ẽ ộ ể ạ ị ị ả
v là màu c a đi m (nXPos, nYPos) ho c 1 n u đi m này n m ngoài ề ủ ể ặ ế ể ằvùng hi n th ể ị
+DWORD MoveToEx(HDC hDC, int x, int y);
Di chuy n bút v đ n t a đ (x, y) trên hDC. Giá tr tr v là t a đ cũ ể ẽ ế ọ ộ ị ả ề ọ ộ
Trang 17Tô màu m t vùng kín, fillStyle quy t đ nh cách tô : ộ ế ị
FLOODFILLBORDER : Tô màu vùng có màu đường biên là cRef.
FLOODFILLSURFACE : Tô vùng có màu cRef.
4.H P THO I VÀ ĐI U KHI NỘ Ạ Ề Ể
4.1 H p tho i ộ ạ
H p tho i ph i h p gi a ngộ ạ ố ợ ữ ườ ử ụi s d ng v i chớ ương trình b ng ằ
m t s ph n t đi u khi n mà các ph n t này nh n nhi m v thu nh n ộ ố ầ ử ề ể ầ ử ậ ệ ụ ậthông tin t ngừ ười dùng và cung c p thông tin đ n ngấ ế ười dùng khi người dùng tác đ ng đ n các ph n t đi u khi n. Các ph n t đi u khi n này nh nộ ế ầ ử ề ể ầ ử ề ể ậ
c a s cha là m t h p tho i. Các ph n t đi u khi n thử ổ ộ ộ ạ ầ ử ề ể ường là các Button, List Box, Combo Box, Check Box, Radio Button, Edit Box, Scroll Bar, Static.
H p tho i tr ng thái (modal). ộ ạ ạ
H p tho i không tr ng thái (modeless). ộ ạ ạ
H p tho i thông d ng (common dialog) ộ ạ ụ
4.2Thi t k h p th aiế ế ộ ọ
Ví d : ụ
Trang 184.3Các ki u đi u khi n ể ề ể
Trang 19Các ki u đi u khi n để ề ể ược khai báo trong resource script có d ng nh ạ ư
sau, ngo i tr ki u đi u khi n LISTBOX, COMBOBOX, SCROLLBAR, ạ ừ ể ề ểEDITTEXT.
Controltype "text", id, xPos, yPos, xWidth, yHeight, iStyle
Các ki u đi u khi n LISTBOX, COMBOBOX, SCROLLBARể ề ể , EDITTEXT
được khai báo trong resource script v i c u trúc nh trên ớ ấ ư
nh ng không có trư ường "text".
Thêm thu c tính cho các ki u đi u khi n b ng cách thay đ i tham ộ ể ề ể ằ ổ
s ố
iStyle
Ví d ta mu n t o radio button v i chu i di n đ t n m bên trái ụ ố ạ ớ ỗ ễ ạ ằ ở
c a nút thì ta gán trủ ường iStyle b ng BS_LEFTTEXT c th nh sau:ằ ụ ể ư
Trang 204.4 Th t c x lý h p th ai ủ ụ ử ộ ọ
Đ c đi m :ặ ể
• M i h p th ai c n có m t th t c x lý riêng. ỗ ộ ọ ầ ộ ủ ụ ử
• Các thông đi p không đệ ược g i t i hàm x lý c a s chính. ử ớ ử ử ổ
• X lý thông đi p nào thì tr vử ệ ả ề TRUE, n u không tr v FALSE ế ả ề
• Thường ph i x lý hai thông đi p chínhả ử ệ : WM_INITDIALOG và WM_COMMAND: LOWORD(WPARAM) ch a ID các đi u khi nứ ề ể
4.5 H p tho i tr ng thái ộ ạ ạ
Hi n th h p tho i ể ị ộ ạ
G i thông đi p đ n hàm WndProc yêu c u x lý ngay c khi h p ở ệ ế ầ ử ả ộ
tho i đang m nh hàm SendMessageạ ở ờ :
Trang 214.6 H p tho i không tr ng thái ộ ạ ạ
Hi n th h p tho i ể ị ộ ạ
Trang 22h n . M c dù đã r t c g ng nh ng do l n đ u ti p xúc v i l p trình ơ ặ ấ ố ắ ư ầ ầ ế ớ ậWindows API nên chúng em không tránh kh i nh ng sai sót .Vì v y chúng ỏ ữ ậ
em r t mong th y góp ý thêm cho bài làm c a nhómấ ầ ủ
M t l n n a, chúng em xin c m n s nhi t tình c a ộ ầ ữ ả ơ ự ệ ủ th yầ giáo đã giúp nhóm hoàn thành bài t p l n nàyậ ớ