Ạ Ọ
Ộ Đ I H C BÁCH KHOA HÀ N I
ệ
Khoa Công Ngh Thông Tin
Ậ Ớ
BÁO CÁO BÀI T P L N MÔN
Ệ Ề
H ĐI U HÀNH
ể ậ
Đ tàiề
: Tìm hi u l p trình API trong windows
ướ
Giáo viên h
ng d n
ẫ :
ự
Nhóm sinh viên th c hi n
ệ :
ấ ễ
ầ
ồ
1
Nguy n Tu n Anh ố Tr n Qu c Huy Chu Gia Khôi Vũ H ng Quân Hoàng Thanh Tùng 20080075 20081166 20081409 20082128 20082997
ụ ụ M c l c
2 Mục lục ............................................................................................................... I.MỞ ĐẦU: 2 .......................................................................................................... 4 .......................................... 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: .........................................................................................
5 3. Các thành phần giao diện đồ họa (GUI – Graphics User Interface) ...................
6 4. Qui trình hoạt động của chương trình ứng dụng: ..............................................
6 5. Ví dụ ....................................................................................................................
III, MỘT SỐ THÀNH PHẦN CƠ BẢN 1. Tài nguyên của ứng dụng (Resources)
12 .............................................................. 12 ...................................................... 13 ....................................................................................
2. Một số kiểu dữ liệu mới:
15 3. Một số hàm đồ họa cơ sở: .................................................................................
4.HỘP THOẠI VÀ ĐIỀU KHIỂN
17 .............................................................................
IV.Kết luận
21 ........................................................................................................
Ở Ầ I.M Đ U:
2
ụ ấ ễ ử ụ ủ ư
ườ ậ ễ ỏ ố ớ Các ng d ng c a Windows r t d s d ng, nh ng r t khó đ i v i i l p trình
ấ ể ạ ượ c tính d dùng đòi h i ng ặ ứ ạ ậ ấ ườ ả ỏ ứ ể ề ng i đã t o l p ra chúng. Đ đ t đ 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 ộ ố ấ c m t s v n ườ i dùng, t b vào ra, thâm nh p Internet, kh năng chia
ơ ẽ ả trên DOS. Tuy nhiên l p trình trên Windows s gi i quy t đ ự ề ng DOS nh xây d ng giao di n ng đ khó khăn trong môi tr ả ộ ậ ớ ả ả qu n lý b nh o, đ c l p thi ẻ s tài nguyên, ...
ườ ậ ậ
ọ ư ệ ề ấ Windows cung c p các hàm đ ng ủ ệ ậ ứ
ữ
ế ộ
ờ ọ ỉ
3
ặ ặ ể 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 ư ệ ặ ượ c đ t trong các th vi n Programming Interface – API). Nh ng hàm này đ ử ươ ụ ứ liên k t đ ng (Dynamic Link Library – DLL). Các ch ng trình ng d ng s ẻ ượ ụ c khi trong máy có i g i hàm và ch chia s đ d ng chúng thông qua các l cài đ t Windows.
Ơ Ộ
Ứ
Ệ
II, S B WINDOW API, CÁCH TH C LÀM VI C
ư ệ ậ ủ 1. 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 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++,… ộ ố M t s thành ph n c b n c a SDK: • Win32 API. • GDI/GDI+. • Windows Multimedia. • OpenGL. • DirectX. • COM/COM+. • ADO (ActiveX Data Object). • OLE DB. • …
ơ ả ệ 2. Các khái ni m c b n:
ữ ươ ứ ổ Message: Trao đ i thông tin gi a ch ệ ề ụ ng trình ng d ng và h đi u
hành.
ọ ở ệ ố ể ử ượ ậ Đ c g i b i h th ng đ x lý các Message nh n
Th t c Window: ượ đ ủ ụ c.
ợ ươ ể ứ ợ ng trình có 1 hàng đ i Message đ ch a
ỗ : M i ch ươ ỗ ặ Hàng đ i Message các Message. M i ch ng trình có vòng l p Message.
ạ ộ ị ể
ộ ố ượ ấ ử ổ ớ ị Handle: M t giá tr 32 bits không d u (unsigned) do HĐH t o ra đ ng (c a s , file, vùng nh , menu,…). làm đ nh danh cho m t đ i t
ứ ụ ể ạ ị ị
4
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.
ủ ụ ẽ ượ ọ ở c g i b i HĐH, không
ả ở ứ ộ ụ ủ Callback: Thu c tính c a 1 hàm/ th t c s đ ph i b i ng d ng.
ệ ồ ọ ầ 3. Các thành ph n giao di n đ h a (GUI – Graphics User Interface)
ơ ả ạ Các d ng GUI c b n:
SDI – Single Document Interface:
ệ ộ ử ổ
ướ ử ổ c c a s (Resizeable).
ổ ử ổ
ụ + M t c a s làm vi c. + Cho phép thay đ i kích th + 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
ướ ử ổ ổ c c a s (Resizeable).
ử ổ
ụ ộ ử ổ (Child window). + Cho phép thay đ i kích th + Cho phép Maximize/Minimize/Close các c a s con. + Ví d : Word, Excel, VC++,…
Dialog:
c c đ nh.
ệ ướ ố ị ng có kích th ng không có menu bar. ng có các button, edit box, listbox,…
ộ ử ổ ườ ườ ườ ụ + M t c a s làm vi c. + Th + Th + Th + Ví d : Calculator, CD Player,…
ể ể ả
ử ổ C a s : ị Đ 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. ừ ườ i dùng + Và nh n các input t ng ụ ứ ủ ậ ệ ử ổ ạ ầ Công vi c đ u tiên c a 1 ng d ng GUI là t o 1 c a s làm
5
vi c. ệ
ả
ử ổ ỗ ử ổ ề + Mô hình phân c p: m i c a s đ u có 1 c a s cha (parent
ử ổ ậ ỗ ờ ừ user
ắ Nguyên t c qu n lý: ấ ạ ừ ử ổ ề 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 (Active/Focused window).
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.
ạ ộ ủ ươ 4. Qui trình ho t đ ng c a ch ứ ng trình ng d ng ụ :
ị ể
ử ổ ượ ờ ử ổ ử c hi n th lên màn hình. ệ
ụ ứ C a s đ Ch c a s g i thông đi p. Các thông đi p đ c Windows g i tr l
ờ ọ qua l
ươ ươ ệ ậ ươ ng trình ng d ng thông ụ ụ ọ ệ ượ ủ i g i hàm c a chúng trong ch ượ c thông đi p, ch Khi nh n đ ử ả ạ i ch ứ ng trình ng d ng. ứ ng trình ng d ng g i các hàm API và
ể ự ủ ệ ệ ố hàm c a riêng chúng đ th c hi n công vi c mong mu n.
ậ ậ ệ
ơ ở ệ ề ể ề
ấ ọ ộ 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 ề i s d ng thông qua m t hay nhi u
ầ ả ườ ử ụ ươ ng tác c a ng d ng v i ng ế ử ổ ử ổ ạ ậ 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
char szAppName [ ] = “Vidu”;
int WINAPI WinMain (HANDLE hInst, HANDLE hPrevInst,
LPSTR lpszCmdLine, int nCmdShow)
6
{ HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = XulyMessage; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInst; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow(szAppName,
“Vi du mo dau”,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInst, NULL); ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg);
}
return msg.wParam;
} LRESULT CALLBACK XulyMessage (HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{ HDC hdc; PAINTSTRUCT ps; RECT rect; switch (iMsg) { case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rect); DrawText (hdc, “Lap trinh C for Win”, 1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
7
EndPaint (hwnd, &ps); break;
case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc (hwnd, iMsg, wParam, lParam);
} return 0;
}
ẽ ụ ượ ủ
ươ ạ ộ ươ ị ng trình đ n gi n trên Windows, ch
c nguyên lý ho t đ ng c a chúng. Trên ỉ ể ng trình ch hi n th 1 ấ ể ắ ả ơ ữ ư ề ệ ấ
ớ ỉ
ắ ậ ế ự ơ ầ ươ ữ ẵ ộ ả Ta s kh o sát ví d trên đ n m đ ạ đây là đo n ch ử ổ khung c a s và 1 dòng ch nh ng có r t nhi u l nh mà cú pháp r t khó ậ nh . 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 ủ ế ẫ ng trình m u có s n. t d a vào m t ch
ượ ự ệ ể ầ ọ ủ c th c hi n đ u tiên hay còn g i là đi m vào c a
ươ
a. Hàm WinMain() đ ng trình. ch ấ
ố 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 ộ ể ờ ạ ng trình cùng ch y vào cùng m t th i đi m nên cùng m t ch ỉ ố ả ặ ả ng trình ph i qu n lý ch t ch chúng. hInst là ch s b n ch ở ộ ừ c kh i đ ng v a kh i đ ng, hPrevinst là ch s c a b n đã đ ướ 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 đ c tr ng b ng 1 tên (classname) d ng chu i. c a s đ
ớ ử ổ ủ ệ ố ượ ạ Phân lo i class: L p c a s c a h th ng (System class): Đ c
ướ ở ứ ụ ể c b i HĐH Windows. Các ng d ng không th
8
ị đ nhnghĩa tr ủ ỏ h y b .
ớ ử ổ ượ ụ ở
ứ ứ ể ủ ỏ ử ụ ữ ng d ng. Có th h y b khi không còn s d ng n a.
ụ ủ ứ
ớ ớ ụ ộ ủ ứ ị L p c a s do ng d ng đ nh nghĩa: Đ c đăng ký b i ụ ụ 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 ấ ủ ử ổ ầ ả ổ ữ ệ tính ch t c a c a s , l n s (Window Class). Đây là c u trúc d li u mô t ử ổ ớ ầ ượ ị 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 , l ồ ệ ử ổ ị c, ki u, đ a ch hàm x lý thông đi p c a s , đ nh nghĩa bao g m: Kích th ớ ề ỏ ạ hình d ng cho con tr chu t (cursor) và bi u t ng (Icon), màu n n, tên l p ử ổ c a s .
struct WNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; };
ả + 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); ớ c đ nh nghĩa trong window.h là v i: Ki u giá tr c a ATOM đ ớ ử ổ 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,
9
LPCSTR lpWinName, DWORD dwStyle, int X, int Y,
int 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);
ứ ố ượ ậ c nh n
ị ầ ầ ỉ ố ử ổ ầ ị ể ớ 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 đ ủ giá tr l n đ u tiên c a hàm WinMain()
ể ả ẽ ạ ụ t là ph i v l
ầ
ứ ả ọ ế ệ ử ổ ử ệ ệ ế Đ thông báo cho ng d ng bi 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
ươ
ng trình. ủ ụ ệ ủ ể ươ
ả ề ử ệ
ạ ủ ụ ử ử ậ + Nh n và x lý thông đi p c a ch ề ộ + 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)
{
switch (message) { case WM_COMMAND:
return 0;
case WM_PAINT:
10
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
ậ ệ 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
ạ ử ổ CreateWindow ShowWindow UpdateWindow
ấ
ệ ộ ạ
ể ẽ ạ ử ổ ạ ii. Xu t hi n h p tho i (Dialog box), thông báo (Message box) làm ộ ử ổ ặ che m t ph n ho c toàn b c a s , khi các h p tho i này đóng đi thì ph i g i WM_PAINT đ v l ộ i c a s .
ộ ầ ả ọ ổ iii. Khi thay đ i kích th ướ ử ổ c c a s
ở ử ổ iv. C a s đang
WS_HREDRAW | WS_VREDRAW minimize ,maximize ỉ ế ữ ả ế ị ồ t b g m
ế ị ầ ứ ế ị thi t b .
ề ữ ả
HDC: (Handle to a device context) ch đ n 1 ng c nh thi ể tb ph n c ng và trình đi u khi n thi ấ ế ị BeginPaint: L y ng c nh thi t b . ữ ả ả i phóng ng c nh thi EndPaint: Gi ế ị t b .
ử ổ ặ ọ ấ ườ ấ i dùng ch n nút close trên c a s ho c nh n
ệ ụ ặ + Nhi m v PostQuitMessage đ t thông đi p WM_QUIT vào hàng
11
ệ Thông đi p WM_DESTROY: ệ + Xu t hi n khi ng Alt+F4. ệ đ i. ợ
Ầ Ơ Ả
Ộ Ố
III, 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 c s d ng trong ng d ng (VD: menu
+ Đ c đ nh nghĩa bên ngoài và đ ủ c thêm vào trong file thi hành c a
ị ượ ử ụ ng (object) đ bar, dialog, bitmap, icon, cursor, …). ượ ượ ứ ng d ng khi biên d ch (linking).
12
ạ ị ụ + Các d ng resource:
13
ớ ộ ố ể ữ ệ 2. M t s ki u d li u m i:
14
ộ ố ồ ọ ơ ở 3. M t s hàm đ h a c s :
3.1 Nhóm hàm v ẽ
(cid:153)
ị ủ ể ế i v trí (nXPos, nYPos) c a hDC, tr v 1 n u đi m
ị ề ằ ạ ị ể
(cid:153)
ạ ị
ế ể ể ặ ằ
(cid:153)
15
ẽ ế ọ ộ ị ả ề ọ ộ ể + COLORREF GetPixel(HDC hDC, int nXPos, int nYPos); ả ề ấ L y v giá tr màu t này n m ngoài vùng hi n th . +COLORREF SetPixel(HDC hDC, int nXPos, int nYPos, COLORREF clrRef); ị ả ể ẽ ộ i v trí (nXPos, nYPos) lên hDC. Giá tr tr V m t đi m màu clrRef t ủ ề 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ũ
(cid:153)
ị ẳ ệ ế v trí hi n hành đ n v trí (xEnd, yEnd) trên hDC.
ế ấ ạ ừ ị ế
(cid:153)
ạ ẳ ế ố ỉ
ỉ
(cid:153)
ọ ộ ẽ ỉ ỉ ở c xác đ nh b i lpPoints.
ị ấ ạ ượ ế ả ề ế
(cid:153)
ữ ậ ọ ộ
(cid:153)
ẽ ể ạ
ả ề ủ ế
ộ ẽ ế ư ị ủ ẽ x = LOWORD, y = HIWORD. ủ c a bút v , +BOOL LineTo(HDC hDC, int xEnd, int yEnd); ạ ẽ V đo n th ng t ả ề Hàm tr v TRUE n u thành công, FALSE n u th t b i. +BOOL Polyline(HDC hDC, const POINT FAR *lpPoints, int nPoints); ằ ẽ ườ ấ V đ ng g p khúc lên hDC b ng các đo n th ng liên ti p, s đ nh là ị ả ề ượ ớ ọ ộ c xác đ nh trong lpPoints. Hàm tr v nPoints v i t a đ các đ nh đ ấ ạ ế ế TRUE n u thành công, FALSE n u th t b i. +BOOL Polygon(HDC hDC, const POINT FAR *lpPoints, int nPoints); V đa giác có nPoints đ nh, t a đ các đ nh đ Hàm tr v TRUE n u thành công, FALSE n u th t b i. +BOOL Rectangle(HDC hDC, int left, int top, int right, int bottom); ẽ V hình ch nh t có t a đ là left, top, right, bottom lên hDC. +HPEN CreatePen(int penStyle, int penWidth, COLORREF penColor); ẽ T o bút v có ki u penStyle, đ dày nét v là penWidth, màu penColor. ấ ả ề Hàm tr v handle c a bút v n u thành công và tr v NULL n u th t ạ b i. Các giá tr c a penStyle nh sau :
(cid:153)
ẫ
(cid:153)
ướ ể ạ ớ i ki u bStyle v i màu cRef.
16
ẫ ể 3.2 Nhóm hàm mi n ề HBRUSH CreateSolidBrush(COLORREF cRef); ặ ớ ạ T o m u tô đ c v i màu cRef. HBRUSH CreateHatchBrush(int bStyle, COLORREF cRef); ạ T o m u tô d ng l Các ki u bStyle :
(cid:153)
ườ ộ ng biên là cRef.
(cid:153)
ế ị
ng biên là cRef.
HS_HORIZONTAL HS_VERTICAL HS_FDIAGONAL HS_BDIAGONAL HS_CROSS HS_DIAGCROSS BOOL FloodFill(HDC hDC, int xStart, int yStart, COLORREF cRef); Tô màu m t vùng kín, màu đ BOOL ExtFloodFill(HDC hDC, int xStart, int yStart, COLORREF cRef, UINT fillStyle); ộ Tô màu m t vùng kín, fillStyle quy t đ nh cách tô : ườ FLOODFILLBORDER : Tô màu vùng có màu đ FLOODFILLSURFACE : Tô vùng có màu cRef.
Ộ Ạ Ể Ề 4.H P THO I VÀ ĐI U KHI N
ộ ạ 4.1 H p tho i
ạ ữ ằ i s d ng v i ch
ố ợ ể ườ ử ụ ầ ử đi u khi n mà các ph n t
ế
đi u khi n. Các ph n t
ớ ề ậ ấ i dùng và cung c p thông tin đ n ng ầ ử ề ạ ề đi u khi n th
ươ ộ ng trình b ng H p tho i ph i h p gi a ng ậ ệ ụ ầ ử ộ ố này nh n nhi m v thu nh n m t s ph n t ườ ườ ừ ườ i dùng khi ng i thông tin t ng ể ậ ể ầ ử ề ế ộ đi u khi n này nh n dùng tác đ ng đ n các ph n t ườ ể ầ ử ộ ộ ử ổ c a s cha là m t h p tho i. Các ph n t ng là các Button, List Box, Combo Box, Check Box, Radio Button, Edit Box, Scroll Bar, Static.
(cid:153)
(cid:153)
ạ ạ ạ ạ ộ ộ ộ 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
17
Ví d :ụ
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 196, 102 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Logon" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,24,81,50,14 PUSHBUTTON "Cancel",IDCANCEL,109,81,50,14 LTEXT "User name",IDC_STATIC,7,23,40,15 LTEXT "Password",IDC_STATIC,7,50,40,16 EDITTEXT DC_EDT_NAME,52,19,137,16,ES_AUTOHSCROLL EDITTEXT IDC_EDT_PASSWORD, 52, 48, 137, 16, ES_AUTOHSCROLL END
18
ể ề ể 4.3Các ki u đi u khi n
ể ể ượ ạ ư c khai báo trong resource script có d ng nh
ể ề
ề Các ki u đi u khi n đ ạ ừ ể sau, ngo i tr ki u đi u khi n LISTBOX, COMBOBOX, SCROLLBAR, EDITTEXT.
Controltype "text", id, xPos, yPos, xWidth, yHeight, iStyle
ể ề ể , EDITTEXT
ớ ấ ư c khai báo trong resource script v i c u trúc nh trên
Các ki u đi u khi n LISTBOX, COMBOBOX, SCROLLBAR ượ đ ư 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
ụ ạ ằ ở ố ạ ễ ớ ỗ bên trái
19
Ví d ta mu n t o radio button v i chu i di n đ t n m ụ ể ư ườ ằ s ố iStyle. ủ c a nút thì ta gán tr ng iStyle b ng BS_LEFTTEXT c th nh sau:
RADIOBUTTON Radio1",IDC_RADIO1,106,10,53,15,BS_LEFTTEXT
ộ ọ ủ ụ ử
(cid:153)
ủ ụ ử ầ
ử ử ổ ộ ượ ử ớ c g i t i hàm x lý c a s chính.
ử ộ 4.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 đ ử ổ • Là m t hàm x lý c a s .
ẫ (cid:153)
M u hàm BOOL CALLBACK Tên hàm (HWND, UINT, WPARAM, LPARAM) ;
ệ
ầ ử WM_PAINT và WM_DESTROY.
ả ề ả ề TRUE, n u không tr v FALSE.
ế : WM_INITDIALOG và ề • Có nhi u thông đi p khác nhau. • Không c n x lý ệ ử • X lý thông đi p nào thì tr v ả ử ườ • Th
ệ ứ ề ng ph i x lý hai thông đi p chính ể . WM_COMMAND: LOWORD(WPARAM) ch a ID các đi u khi n
ạ ạ ộ 4.5 H p tho i tr ng thái
ạ ể (cid:153)
ầ ử ế ệ ả ộ (cid:153)
ở ạ ở :
ị ộ Hi n th h p tho i INT_PTR DialogBox( HINSTANCE hInstance, // handle to module LPCTSTR lpTemplate, // dialog box template HWND hWndParent, // handle to owner window DLGPROC lpDialogFunc // dialog box procedure ); Ví d : ụ DialogBox (hInstance, TEXT ("DIALOG1"), hwnd, DialogProc) ; 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 SendMessage(GetParent(hDlg), message, wParam, lParam);
ề ộ (cid:153)
ệ ạ Thêm tiêu đ cho h p tho i: SetWindowText(hDlg,TEXT("Hello Dialog")); trong x lý ử thông đi p WM_INITDIALOG
(cid:153)
20
ạ ộ Đóng h p tho i BOOL EndDialog( HWND hDlg, // handle to dialog box INT_PTR nResult // value to return );
ộ ạ
ể ạ ạ 4.6 H p tho i không tr ng thái ị ộ Hi n th h p tho i (cid:153)
(cid:153)
ề ị
HWND hDlgModeless=CreateDialog(hInstance, szTemplate, hwndParent, DialogProc); ShowWindow(hDlgModeless,SW_SHOW); while(GetMessage(&msg, NULL, 0, 0)) { if (hDlgModeless==0 || !IsDialogMessage (hDlgModeless, &msg); { TranslateMessage(&msg); DispatchMessage(&msg); } } while(GetMessage(&msg, NULL, 0, 0)) { if (hDlgModeless==0 || !IsDialogMessage(hDlgModeless, &msg); { if(TranslateAccelerator (hwnd, hAccel, &msg) { TranslateMessage(&msg); DispatchMessage(&msg); } } } ạ ộ Đóng h p tho i ặ Đ t hDlgModeless v giá tr 0. BOOL DestroyWindow( HWND hWnd // handle to window to destroy );
ờ
ậ ộ
ế
ượ
ể ứ ơ ả ấ ề ậ ề ậ ộ ọ ỏ ự ấ ứ ứ ế ậ ể ấ
ế IV.K t lu n ỡ ẫ ệ Sau m t th i gian làm vi c chung , đóng góp ý ki n và giúp đ l n ữ nhau khi tìm hi u v l p trình Windows API , chúng em đã thu đ c nh ng ki n th c c b n v l p trình API. Trong quá trình nghiên c u ,chúng em nh n th y đây là m t lĩnh v c r t hay , r t đáng đ nghiên c u , h c h i sâu
21
ặ ấ ố ắ ớ ậ ư ầ ầ
ậ
ấ ầ ế ơ h 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 đã
22
ậ ớ giúp nhóm hoàn thành bài t p l n này