Ạ Ọ

Ộ Đ 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, list­box,…

ộ ử ổ ườ ườ ườ ụ + 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   LRESULT CALLBACK XulyMessage (HWND,UNIT,WPARAM,LPARAM);

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 (class­name) 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.

Control­type "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