Bài giảng Lập trình C trên Win - Lương Văn Vân

ppt 98 trang phuongnguyen 5370
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C trên Win - Lương Văn Vân", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_lap_trinh_c_tren_win_luong_van_van.ppt

Nội dung text: Bài giảng Lập trình C trên Win - Lương Văn Vân

  1. 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
  2. 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: 105 tiết ▪ Lý thuyết: 45 tiết ▪ Bài tập: 0 tiết ▪ Thực hành: 60 tiết ❖ 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 2
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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 nguyên đượ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
  13. 1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS Lập trình C trên Windows ❖ Tập tin khai báo các thuộc tính cho ứng dụng ▪ 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 đề án : ▪ Tên_Dự_án.DSW (*.DSW) Khoa cơng nghệ thơng tin 13
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  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_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
  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_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
  25. 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
  26. 1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS Lập trình C trên Windows ❖ Xây dựng một ứng dụng đầu tiên ▪ WinMain : hàm chính của chương trình thực hiện các chức năng : • Khai báo lớp cửa sổ. • Đăng ký lớp cửa sổ vừa khai báo. • Tạo và hiển thị lớp cửa sổ trên. • Vịng lặp nhận thơng điệp. ▪ WndProc : Hàm xử lý thơng điệp gởi đến cửa sổ . Khoa cơng nghệ thơng tin 26
  27. 1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS Lập trình C trên Windows ❖ Các kiểu dữ liệu mới ▪ PSTR: một con trỏ đến một chuỗi tương tự như char* ▪ WPARAM và LPARAM, trong tham số thứ 3 của hàm WndProc được khai báo là kiểu WORD, với kích thước 16-bit , cịn tham số thứ 4 cĩ kiểu LONG là 32-bit ▪ LRESULT: Kiểu này đơn giản được định nghĩa như là kiểu LONG ▪ HANDLE: là một số nguyên 32-bit được sử dụng như một kiểu định danh Khoa cơng nghệ thơng tin 27
  28. 1.4: CÁCH VIẾT MỘT UD TRÊN MS WINDOWS Lập trình C trên Windows 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 Bool. LPSTR Con trỏ chuỗi. 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. Khoa cơng nghệ thơng tin 28
  29. Chương 2: HỘP THOẠI VÀ THANH TRÌNH ĐƠN Lập trình C trên Windows Giới thiệu Menu Hộp Thoại Khoa cơng nghệ thơng tin
  30. 2.1: MỞ ĐẦU Lập trình C trên Windows ❖ Hộp thoại (dialog) và thanh trình đơn (menu) là các thành phần khơng thể thiếu trong việc tổ chức giao tiếp giữa người sử dụng và chương trình. Hộp thoại được xem như là một loại cửa sổ đặc biệt, là cơng cụ mềm dẻo, linh hoạt để đưa thơng tin vào chương trình một cách dễ dàng. Trong khi menu là cơng cụ giúp người dùng thực hiện các thao tác đơn giản hơn, thơng qua các nhĩm chức năng thường sử dụng . Khoa cơng nghệ thơng tin 30
  31. 2.1: MENU Lập trình C trên Windows ❖ Menu popup hay dropdown ❖ Các trạng thái của Menu: ▪ Check ▪ Uncheck ▪ Enabled ▪ Disabled ▪ Grayed ▪ SEPARATOR Khoa cơng nghệ thơng tin 31
  32. 2.1: MENU Lập trình C trên Windows ❖ Thiết lập Menu ▪ Tạo menu trong tập tin tài nguyên *.RC ▪ Cú pháp: [Định_danh_menu] MENU DISCARDABLE (từ khĩa) BEGIN POPUP "&[Tên_Mục 1]" BEGIN MENUITEM "&[Tên_mục_con 1.1]", [Tên ID 1.1] MENUITEM "&[Tên_mục_con 1.2]", [Tên ID 1.2] . END POPUP "&[Tên_Mục 2]" BEGIN MENUITEM "&[Tên_mục_con 2.1]", [Tên ID 2.1] MENUITEM "&[Tên_mục_con 2.2]", [Tên ID 2.2] . MENUITEM SEPARATOR END END Khoa cơng nghệ thơng tin 32
  33. 2.1: MENU Lập trình C trên Windows ❖ Cách đặt menu vào cửa sổ của chương trình ứng dụng: ▪ Thiết lập thuộc tính lpszMenuName của cấu trúc lớp WNDCLASS bằng tên menu được khai báo trong tập tin tài nguyên. ▪ Ví dụ: wndclass.lpszMenuName = “Tên_Menu”; ▪ Để xử lý menu, Windows phát sinh thơng điệp WM_COMMAND và gởi đến chương trình khi người dùng chọn một mục liệt kê. Khoa cơng nghệ thơng tin 33
  34. HỘP THƠNG BÁO Lập trình C trên Windows ❖ int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); ▪ hWnd: Chỉ danh cửa sổ sở hữu hộp thơng báo, cĩ thể để NULL ▪ lpText: Chuỗi thơng báo ▪ lpCaption: Tựa đề hộp thơng báo ▪ uType: Kiểm bao gồm các nút điều khiển Khoa cơng nghệ thơng tin 34
  35. HỘP THƠNG BÁO Lập trình C trên Windows ❖ uType cĩ thể là các giá trị sau: ▪ MB_ABORTRETRYIGNORE: Hộp thơng báo bao gồm các nút Abort, Retry, Ignore ▪ MB_OK: Hộp thơng báo bao gồm các nút Ok ▪ MB_OKCANCEL: Hộp thơng báo bao gồm các nút Cancel, Ok ▪ MB_RETRYCANCEL: Hộp thơng báo bao gồm các nút Retry, Cancel ▪ MB_YESNO: Hộp thơng báo bao gồm các nút Yes, No ▪ MB_YESNOCANCEL: Hộp thơng báo bao gồm các nút Yes, No, Cancel Khoa cơng nghệ thơng tin 35
  36. HỘP THƠNG BÁO Lập trình C trên Windows ❖ Giá trị trả về của hàm: ▪ IDABORT: Nút Abort được chọn ▪ IDCANCEL: Nút Cancel được chọn ▪ IDIGNORE: Nút Ignore được chọn ▪ IDNO: Nút No được chọn ▪ IDOK: Nút Ok được chọn ▪ IDRETRY: Nút Retry được chọn ▪ IDYES: Nút Yes được chọn Khoa cơng nghệ thơng tin 36
  37. VÍ DỤ: Lập trình C trên Windows ❖ Xây dựng một ứng minh họa Menu và hộp thơng báo: Khoa cơng nghệ thơng tin 37
  38. 2.1: HỘP THOẠI Lập trình C trên Windows ❖ Các phần tử trên Hộp thoại: ▪ Button ▪ List Box ▪ Combo Box ▪ Check Box ▪ Radio Button ▪ Edit Box ▪ Scroll Bar ▪ Static. Khoa cơng nghệ thơng tin 38
  39. 2.1: HỘP THOẠI Lập trình C trên Windows ❖ Các loại Hộp thoại: Cĩ 3 loại hộp thoại cơ bản ▪ 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). Khoa cơng nghệ thơng tin 39
  40. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Cách tạo hộp thoại đơn giản Cách 1: Tạo hộp thoại trong tập tin tài nguyên *.RC [Định_danh] DIALOG DISCARDABLE X,Y ,W,H STYLE [Hằng hiển thị kiểu hộp thoại] FONT , “Font name" BEGIN LOẠI ĐIỀU KHIỂU ,[ID], X,Y ,W,H . END Khoa cơng nghệ thơng tin 40
  41. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Ví dụ: Tạo ra hộp thoại sau Khoa cơng nghệ thơng tin 41
  42. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Viết code như sau: DIALOG1 DIALOG DISCARDABLE 40, 20, 164, 90 STYLE DS_MODALFRAME | WS_POPUP FONT 9, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,54,65,50,14 CTEXT "HELLO WORLD ",IDC_STATIC,53,38,72,10 ICON IDI_ICON1,IDC_STATIC,68,9,21,20 END Khoa cơng nghệ thơng tin 42
  43. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Cách 2: ▪ Sử dụng cơng cụ Visual C++ Developer Studio Khoa cơng nghệ thơng tin 43
  44. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Kích hoạt một hộp hội thoại: Int DialogBox(HINSTANCE hThisInst, LPCSTR lpszName, HWND hWnd, DLGPROC lpDFunc); ▪ hThisInst : là chỉ danh thể hiện hiện thời. ▪ lpszName: Tên hộp hội thoại được xác định trong tập tin tài nguyên. ▪ hWnd :Chỉ danh của cửa sổ cha chứaDialog. ▪ lpDFunc: Con trỏ trỏ đến hàm xử lý message cho hộp hội thoại. Khoa cơng nghệ thơng tin 44
  45. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Thủ tục xử lý thơng điệp của hộp thoại: BOOL CALLBACK DialogFunc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) ❑ DialogProc khơng cần xử lý thơng điệp WM_DESTROY, WM_PAINT và WM_CREATE ❑ Thơng điệp WM_INITDIALOG dùng để khởi tạo. ❑ Thơng điệp WM_COMMAND: gởi đến cửa sổ cha khi ta kích hoạt (trong word thấp của đối số wParam) Khoa cơng nghệ thơng tin 45
  46. Hộp thoại trạng thái (modal) Lập trình C trên Windows ❖ Tắt hộp hội thoại: ▪ Để tắt hộp hội thoại modal dùng hàm EndDialog() như sau: BOOL EndDialog (HWND hDlg, int Status); hWnd : là chỉ danh hộp hội thoại Status: Mã trạng thái do hàm DialogBox trả về . Giá trị này cĩ thể bỏ qua. Hàm trả về giá trị nonzero nếu thành cơng ngược lại zero . Khoa cơng nghệ thơng tin 46
  47. Chương 3: CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN Lập trình C trên Windows Khoa cơng nghệ thơng tin
  48. Các loại điều khiển Lập trình C trên Windows ❖ Nút nhấn (Push button) ▪ Cách khai trong tập tin tài nguyên: PUSHBUTTON “Nhãn", IDC_RED, X,Y , W, H Message WM_COMMAND và IDC_RED: được gởi vào tham số message và wParam cho hàm xử lý hộp hội thoại. Khoa cơng nghệ thơng tin 48
  49. Các loại điều khiển Lập trình C trên Windows ❖ Nút CheckBox ▪ Bổ sung Checkbox vào tập tin tài nguyên: CHECKBOX “String” , CBID, X, Y, W, H String: là văn bản trình bày dọc theo CBID : là message cho Checkbox X, Y : Tọa độ Checkbox W, H : Chiều rộng, cao hộp chức văn bản Khoa cơng nghệ thơng tin 49
  50. Các loại điều khiển Lập trình C trên Windows ▪ Hoạt động của checkbox LONG SendDlgItemMessage(HWND hWnd, int ID, UINT IDMsg, WPARAM wParam, LPARAM lParam); Message BM_SETCHECK: Được gởi đến checkbox để xác lập trạng thái chọn hay khơng chọn. Message BM_GETCHECK: Được gởi đến checkbox để lấy các thơng tin chọn hay khơng chọn. Giá trị BST_CHECKED: Hộp kiểm được chọn. Giá trị BST_UNCHECKED: Hộp kiểm khơng được chọn. Khoa cơng nghệ thơng tin 50
  51. Các loại điều khiển Lập trình C trên Windows ▪ Ví dụ: case CBID: If(SendDlgItemMessage(hWnd, CBID, BM_GETCHECK, 0,0)==BST_UNCHECKED) { SendDlgItemMessage(hWnd, CBID, BM_SETCHECK, BST_CHECKED,0); } else SendDlgItemMessage(hWnd, CBID, BM_SETCHECK, BST_UNCHECKED,0); break; Khoa cơng nghệ thơng tin 51
  52. Các loại điều khiển Lập trình C trên Windows ❖ Điều khiển tĩnh ▪ LTEXT “string”, ID,X, Y, W, H //Chuỗi được canh trái ▪ RTEXT “string”, ID,X, Y, W, H // Chuỗi được canh phải ▪ CTEXT “string”, ID,X, Y, W, H // Chuỗi được canh giữa String: là chuỗi được hiển. ID: chỉ danh của điều khiển X,Y: Tọa độ bắt đầu chuỗi W, H: Chiều rộng, cao của chuỗi Khoa cơng nghệ thơng tin 52
  53. Các loại điều khiển Lập trình C trên Windows ❖ Điều khiển Radio ▪ Giống như điều khiển checkbox như lựa chọn có loại trừ AUTORADIOBUTTON “String”, ID, X, Y, W, H ▪ Hàm SendDlgItemMessage() gởi thông điệp BM_GET_CHECK Nếu wParam là BST_CHECHED ,nút này sẽ được chọn, Nếu là BST_UNCHECHED hộp sẽ được xóa Khoa cơng nghệ thơng tin 53
  54. Các loại điều khiển Lập trình C trên Windows ❖ Hộp nhập văn bản (EDITTEXT) ▪ Khai báo trong tập tin .RC EDITTEXT ID, X,Y, W,H ▪ Cách lấy dữ liệu từ hộp nhập dữ liệu UINT GetDlgItemText(HWND hWnd, int ID, LPSTR lpstr, int Max) hWnd: chỉ danh hộp hội thoại ID: chỉ danh EditText lpstr: Con trỏ chuổi văn bản Max: số ký tự tối đa cần lấy Khoa cơng nghệ thơng tin 54
  55. Các loại điều khiển Lập trình C trên Windows ▪ Cách đưa dữ liệu lên hộp nhập dữ liệu UINT SetDlgItemText(HWND hWnd, int ID, LPSTR lpstr) hWnd: chỉ danh hộp hội thoại ID: chỉ danh EditText lpstr: Con trỏ chuổi văn bản Khoa cơng nghệ thơng tin 55
  56. Các loại điều khiển Lập trình C trên Windows ❖ Hộp danh sách(LISTBOX) ▪ Khai báo trong tập tin .RC LISTBOX ID, X, Y, W, H, style ▪ Đưa danh sách mục chọn vào listbox thông qua message WM_INIDIALOG của hộp hội thoại vì message này được phát đi khi hộp hội thoại khởi động. Khoa cơng nghệ thơng tin 56
  57. Các loại điều khiển Lập trình C trên Windows ▪ Để thêm một mục chọn vào listbox cần gởi message LB_ADDSTRING đến listbox bằng hàm SendDlgItemMessage() LONG SendDlgItemMessage(HWND hDlg, int ID, UINT IDMsg, WPARAM wParm, LPARAM lParam) hWnd: cửa sổ dialog ID: chỉ danh listbox IDMsg : Message cần gởi WParam =0 LParam: chuỗi cần gởi đến Khoa cơng nghệ thơng tin 57
  58. Các loại điều khiển Lập trình C trên Windows ❖ Ví dụ ▪ SendDlgItemMessage(hWnd, LBID, LB_ADDSTRING, 0, “Apple”); Khoa cơng nghệ thơng tin 58
  59. Các loại điều khiển Lập trình C trên Windows ❖ Các thao tác ▪ LB_INSERTSTRING: chèn một chuỗi vào vị trí bất kỳ ▪ Cú pháp: • SendDlgItemMessage(hwndList, LB_INSERTSTRING, iIndex, (LPARAM) szString); ▪ iIndex là vị trí muốn chèn chuỗi vào. ▪ Nếu giá trị này bằng -1 thì chuỗi được chèn vào đáy của list box. Khoa cơng nghệ thơng tin 59
  60. Các loại điều khiển Lập trình C trên Windows ▪ LB_DELETESTRING: Xĩa một chuỗi trong list box ▪ Cú pháp: • SendDlgItemMessage(hwndList, LB_DELETESTRING, iIndex, 0); ▪ iIndex là vị trí muốn xĩa chuỗi vào. ▪ LB_RESETCONTENT: Xĩa hết các phần tử nằm trong list box Khoa cơng nghệ thơng tin 60
  61. Các loại điều khiển Lập trình C trên Windows ▪ LB_GETCOUNT: đếm số mục trong List box Cú pháp: • SendDlgItemMessage(hwndList, LB_GETCOUNT, 0, 0); ▪ LB_GETTEXT: Để chép chuỗi trên mục ListBox vào vùng đệp (chuỗi). Cú pháp: • SendDlgItemMessage(hwndList, LB_GETTEXT, index, (LPARAM) chuoi); Khoa cơng nghệ thơng tin 61
  62. Chương 4: THÔNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows BÀN PHÍM MOUSE TIMER Khoa cơng nghệ thơng tin
  63. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Các thơng điệp về bàn phím ▪ Thơng điệp bàn phím mà chương trình ứng dụng nhận được do Windows chuyển đến phân biệt tình huống phím gõ hay ký tự gõ. ▪ Các phím Shift, phím chức năng(F1, F2, .), các phím mũi tên di chuyển, các phím insert, Delete, phát sinh phím gõ mà khơng phát sinh thơng điệp ký tự gõ. Khoa cơng nghệ thơng tin 63
  64. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Thơng điệp phím gõ ▪ Khi một phím được nhấn Windows đặt thơng điệp WM_KEYDOWN hoặc WM_SYSKEYDOWN và đưa vào hàng đợi thơng điệp của ứng dụng hay cửa sổ nhận được sự quan tâm ▪ Khi nhả phím Windows đặt thơng điệp WM_KEYUP hoặc WM_SYSKEYUP sẽ được hệ điều hành phân phát tới hàng đợi đĩ Khoa cơng nghệ thơng tin 64
  65. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Mã phím ảo ▪ Mã ảo của phím được chứa trong tham số wParam đối với các thơng điệp WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN và WM_SYSKEYUP , cho biết giá trị của phím nhấn hay thả. ▪ Giá trị LOWORD(lParam)(16 bit thấp ) chứa số lần nhấn của phím, đối với các thơng điệp WM_KEYUP, WM_SYSKEYUP thì số lần luơn bằng 1. Khoa cơng nghệ thơng tin 65
  66. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Bảng Mã phím ảo Khoa cơng nghệ thơng tin 66
  67. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows Khoa cơng nghệ thơng tin 67
  68. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Trạng thái lật phím ▪ Trong chương trình đơi khi phải phải biết trạng thái của các phím Shift, Ctrl, Alt cĩ được nhấn kèm khơng, hoặc Caps lock, Num Lock, Scroll Lock đang bật hay tắt. Các thơng tin này cĩ thể biết được bằng cách gọi hàm: IState = GetKeyState (VK_SHIFT); ▪ Istate magng giá trị âm nếu phím Shift đang nhấn kèm Khoa cơng nghệ thơng tin 68
  69. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Thơng điệp nhận dạng ký tự gõ ▪ Hàm TranslateMessage() diễn dịch các thơng điệp phím gõ thành các thơng điệp ký tự gõ. Hàm TranslateMessage sẽ tạo thơng điệp ký tự gõ WM_CHAR và đặt nĩ vào hàng đợi và nĩ sẽ được xử lý lần kế tiếp. ▪ Các tham số lParam của thơng điệp WM_CHAR tương tự tham số lParam của thơng điệp phím gõ, cịn tham số wParam của thơng điệp ký tự gõ sẽ chứa mã ASCII thay vì mã phím ảo. Khoa cơng nghệ thơng tin 69
  70. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Device context: ▪ Device context là một cấu trúc dữ liệu được duy trì để kết hợp với một thiết bị hiển thị như màn hình, máy in, ▪ Khi vẽ đầu tiên phải lấy chỉ danh của device context và sau khi sử dụng chỉ danh device context phải giải phĩng device context. • HDC hDC; // Khai báo chỉ danh device context • hDC = GetDC(hWnd); // Lấy chỉ danh DC của cửa sổ • ReleaseDC(hWnd, hDC); // Giải phĩng DC Khoa cơng nghệ thơng tin 70
  71. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Hàm TextOut: Xuất chuỗi vào vùng client của cửa sổ ▪ TextOut(hDC, x, y, psText, iLength); Trong đĩ: • hDC là device context của cửa sổ cần xuất. • x, y điểm bắt đầu của chuỗi ký tự trong client • psText là một con trỏ trỏ đốn một chuỗi ký tự. • iLength là số ký tự trong chỗi cần xuất. Khoa cơng nghệ thơng tin 71
  72. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Hàm LineTo(): Vẽ đường thẳng ▪ BOOL LineTo(HDC hDC, int X, int Y); Vẽ đường thẳng từ vị trí hiện hành đến tọa độ X, Y ❖ Hàm MoveToEx(): Thiết đặt vị trí hiện hành ▪ BOOL MoveToEx(HDC hDC, int X, int Y, LPPOINT lpCoord); • Tọa độ hiện hành được xác định bởi X, Y • Vị trí trước đĩ được trả về cấu trúc POINT được xác định trong lpCoord. Khoa cơng nghệ thơng tin 72
  73. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Các thơng điệp về mouse ▪ Để xác nhận sự hiện diện của mouse gọi hàm GetSystemMetrics: FMouse =GetSystemMetrics(SM_MOUSERESENT); ▪ Nếu fMouse là TRUE thì mouse được cài đặt, và là FALSE thì mouse khơng được cài đặt. Khoa cơng nghệ thơng tin 73
  74. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Các thơng điệp MOUSE trong vùng client ▪ Khi mouse di chuyển trên màn hình luơn phát ra thơng điệp WM_MOUSEMOVE và khi các nút mouse được nhấn hay thả trong vùng client của một cửa sổ hàm window nhận các thơng điệp: Khoa cơng nghệ thơng tin 74
  75. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ▪ Đối với tất cả thơng điệp giá trị lParam chứa vị trí của mouse. Word thấp LOWORD(lParam) là tọa độ x, word cao HIWORD(lParam) là tọa độ y so với gĩc trên bên trái của cửa sổ. ▪ Giá trị wParam chỉ định trạng thái của các nút chuột và các phím Shift và ctrl: • MK_LBUTTON: Nút trái được nhấn • MK_MBUTTON: Nút giữa được nhấn • MK_RBUTTON: Nút phải được nhấn • MK_SHIFT: Phím Shift được nhấn. • MK_CONTROL: Phím Ctrl được nhấn. Khoa cơng nghệ thơng tin 75
  76. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Các thơng điệp về timer: ▪ Timer của hệ điều hành Windows là một dịch vụ định kỳ thơng báo cho các ứng dụng biết rằng cĩ một khoảng thời gian đã trơi qua. ▪ Thực hiện bằng cách sau một chu kỳ thời gian Windows gởi đến hàm window thơng điệp WM_TIMER. Khoa cơng nghệ thơng tin 76
  77. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Thiết lập bộ định thời: sử dụng hàm SetTimer. ▪ UINT SetTimer(HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); • hWnd : Cửa sổ nhận thơng điệp WM_TIMER • nIDEvent : Chỉ danh của bộ Timer • uElapse: Chu kỳ thời gian mà Windows gởi thơng điệp WM_TIMER tới hàm windows ( tính bằng mili giây) • lpTimerFunc: Địa chỉ hàm timer – Cĩ thể là NULL Khoa cơng nghệ thơng tin 77
  78. Chương 4: THƠNG ĐIỆP BÀN PHÍM, MOUSE, TIMER Lập trình C trên Windows ❖ Hàm KillTimer: để huỷ bỏ bộ định thời ▪ BOOL KillTimer( HWND hWnd, // handle of window that installed timer UINT uIDEvent // timer identifier ); Khoa cơng nghệ thơng tin 78
  79. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows Khoa cơng nghệ thơng tin
  80. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ❖ Device context: ▪ Device context là một cấu trúc dữ liệu được duy trì để kết hợp với một thiết bị hiển thị như màn hình, máy in, ▪ Khi vẽ đầu tiên phải lấy chỉ danh của device context và sau khi sử dụng chỉ danh device context phải giải phĩng device context. • HDC hDC; // Khai báo chỉ danh device context • hDC = GetDC(hWnd); // Lấy chỉ danh DC của cửa sổ • ReleaseDC(hWnd, hDC); // Giải phĩng DC Khoa cơng nghệ thơng tin 80
  81. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ❖ Hàm DrawText: xuất văn bản. ▪ Cú pháp: int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat); Trong đĩ: hDC // handle to device context lpString // con trỏ trỏ đến chuỗi cần vẽ nCount // chiều dài của chuỗi lpRect // con trỏ trỏ đến cấu trúc RECT uFormat // text-drawing flags Khoa cơng nghệ thơng tin 81
  82. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ▪ Giá trị uFormat: • DT_SINGLELINE: một dịng độc lập • DT_CENTER : canh giữa ngang hình chữ nhật • DT_VCENTER: canh giữa dọc hình chữ nhật Khoa cơng nghệ thơng tin 82
  83. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ❖ Thiết lập màu chữ và màu nền. ▪ Cú pháp: • COLORREF SetTextColor (HDC hDC , COLORREF color); • COLORREF SetBkColor (HDC hDC , COLORREF color); Trong đĩ: color: macro RGB(int Red, int Green, int Blue). Khoa cơng nghệ thơng tin 83
  84. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ❖ Font: cĩ các thuộc tính ▪ Typeface: loạI font (Times, Courier, Arial, ) ▪ Style: kiểu dáng (normal, thin, bold, ) ▪ Size: kích cỡ chữ, được xác định theo đơn vị point, 1 point = 1/72 inch = 0.013837 inch Khoa cơng nghệ thơng tin 84
  85. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows ❖ Thiết lập font chữ cho vùng client. ▪ Để sử dụng font hệ thống của Windows thực hiện các bước như sau:: • 1. Gọi hàm GetStockObject() để lấy điều khiển Font. HFONT hFont; //khai báo chỉ danh đk font hFont = GetStockObject(int fnObject); Trong đĩ: fnObject kiểu Font. Chọn SYSTEM_FONT là những loại font cĩ trong hệ thống Windows Khoa cơng nghệ thơng tin 85
  86. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows • 2. Gọi hàm GetObject () lấy các thơng tin về Font. int GetObject( HFONT hFont, int LogFontSize, LOGFONT Lf ); Trong đĩ: hFoont: chỉ danh của điều khiển Font LogFontSize: Kích thước cấu trúc font LOGFONT Lf: Con trỏ trỏ đến cấu trúc LOGFONT Ví dụ: GetObject(hFont, sizeof(LOGFONT), (LOGFONT *) &Lf); Khoa cơng nghệ thơng tin 86
  87. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows • Cấu trúc LOGFONT: typedef struct tagLOGFONT{ • LONG lfHeight; • LONG lfWidth; • LONG lfEscapement; • LONG lfOrientation; • LONG lfWeight; • BYTE lfItalic; • BYTE lfUnderline; • BYTE lfStrikeOut; • BYTE lfCharSet; • BYTE lfOutPrecision; • BYTE lfClipPrecision; • BYTE lfQuality; • BYTE lfPitchAndFamily; • TCHAR lfFaceName [LF_FACESIZE]; } LOGFONT; Khoa cơng nghệ thơng tin 87
  88. Chương 5: XỬ LÝ VĂN BẢN VÀ FONT CHỮ Lập trình C trên Windows • 3. Xác định Font tiếng việt trong trường lfFaceName của tham số lf strcpy((char*)lf.lfFaceName, "VNI-Times"); • 4. Gọi hàm CreateFontIndirect() để tạo ra font cĩ thuộc tính như đã xác định HFONT = CreateFontIndirect(CONST LOGFONT *lplf ); • 5. Gọi hàm SelectObject() cài đặt Font đã xác định vào vùng client. HFONT = SelectObject(HDC hDC, HFONT hFont); Khoa cơng nghệ thơng tin 88
  89. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows Khoa cơng nghệ thơng tin
  90. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Thơng điệp WM_PAINT: Được phát đi khi một phần hay tất cả vùng client bị khơng hợp lệ và cần cập nhật, vẽ lại. Vùng client khơng hợp lệ khi: - Cửa sổ đầu tiên được tạo ra. - Người sử dụng thay đổi kích thước cửa sổ. - Người sử dụng di chuyển các cửa sổ. Khoa cơng nghệ thơng tin 90
  91. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Vẽ hình chữ nhật: Rectangle( HDC hDC, int upX, int upY, int lowX, int lowY) ▪ upX, upY: gĩc trên bên trái ▪ lowX, lowY: gĩc dưới bên phải Khoa cơng nghệ thơng tin 91
  92. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Vẽ Elip: Ellipse( HDC hDC, int upX, int upY, int lowX, int lowY) ▪ upX, upY: gĩc trên bên trái ▪ lowX, lowY: gĩc dưới bên phải Khoa cơng nghệ thơng tin 92
  93. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Tạo thuộc tính bút vẽ: ▪ Gọi hàm CreatePen: 1.CreatePen(int style, int width, COLOREF color); • Style: kiểu bút vẽ và cĩ các giá trị: – PS_DASH : Gạch ngang – PS_DASHDOT : Gạch ngang chấm – PS_DASHDOTDOT : Gach ngang chấm chấm – PS_DOT : Chấm – PS_SOLID : Đường thẳng liền nét. • Width: độ dày của bút vẽ Khoa cơng nghệ thơng tin 93
  94. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ▪ 2. Gọi hàm SelectObject () áp đặt bút vẽ vào DC SelectObject(HDC hDC, HPEN hPen); ▪ 3. Gọi hàm DeleteObject() xĩa bút vẽ : ❖ VD1. Tạo mới 1 Pen HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0); Khoa cơng nghệ thơng tin 94
  95. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Tạo chổi quét: ▪ Chổi quét đặc: • HBRUSH CreateSolidBrush(COLORREF color); • SelectObject(HDC hDC, hBrush); ▪ Chổi quét hoa văn: • HBRUSH CreatePatternBrush(CHBITMAP hBitmap); – hBitmap: hoa văn dạng bitmap • SelectObject(HDC hDC, hBrush); ▪ Gọi hàm DeleteObject() xĩa chổi vẽ Khoa cơng nghệ thơng tin 95
  96. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ❖ Hiển thị Bitmap: ▪ Tạo nguồn bitmap trong tập tin tài nguyên : • BitmapName BITMAP “c:\filebitmap.bmp” ▪ Hàm LoadBitmap(): nạp Bitmap vào ứng dụng dùng LoadBitmap(HINSTANCE hThisInst, LPCSTR lpszName) – LpszName : là tên của bitmap “BitmapName” • Ví dụ: HBITMAP hBit1; hBit1= LoadBitmap(hThisInst, “BitmapName”); Khoa cơng nghệ thơng tin 96
  97. Chương 6: ĐỒ HỌA VÀ CÁC ĐỐI TƯỢNG GDI Lập trình C trên Windows ▪ Đạt được device context của cửa sổ • hDC = GetDC(hWnd); ▪ Đạt được device context của bộ nhớ sẽ chứa bitmap • HDC hMemDC; • hMemDC = CreateCompatibleDC(hDC); ▪ Chọn bitmap trong device context của bộ nhớ. • SelectObject (hMemDC, hBit1); ▪ Sao chép bitmap từ DC của bộ nhớ sang DC của cửa sổ • BitBlt(hDC,xd,yd, Wd, Hd, hMemDC, xs,ys , SRCCOPY); ▪ Giải phĩng device context của cửa sổ và bộ nhớ. • ReleaseDC(hWnd, hDC); • DeleteDC(hMemDC); Khoa cơng nghệ thơng tin 97
  98. Lương Văn Vân Khoa cơng nghệ thơng tin