Lập trình Windows - Chương 1: Tổng quan về Lập trình Windows và thư viện MFC

Tài liệu Lập trình Windows - Chương 1: Tổng quan về Lập trình Windows và thư viện MFC: GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 1 Tổng quan về Lập trình Windows và thư viện MFC GV: Nguyễn Thị Mai Trang 2 Mục tiêu  Giới thiệu tổng quan về lập trình Windows  Giới thiệu thư viện lập trình MFC và môi trường Visual C++  Qua chương này, sinh viên có thể hiểu và vận dụng các lớp trong thư viện MFC để viết chương trình ở mức tạo một ứng dụng đơn giản nhất. GV: Nguyễn Thị Mai Trang 3 Nội dung  Tổng quan về Lập trình Windows  Thư viện lập trình MFC  Làm quen với Visual C++ 6.0 GV: Nguyễn Thị Mai Trang 4 Bài 1: Tổng quan về Lập trình Windows  Giao diện người dùng kiểu đồ họa: – Các ứng dụng Windows có giao diện thống nhất • Cửa sổ hình chữ nhật • Thanh tiêu đề • Thanh thực đơn (menu) • Thanh công cụ (Toolbar) • Thanh cuộn (Scrollbar) • Hộp hội thoại (Dialog) • V GV: Nguyễn Thị Mai Trang 5 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 6 Bài 1: Tổng quan về Lập trình Windows  Tính đa nhiệm: – Mỗi chương trì...

pdf348 trang | Chia sẻ: Khủng Long | Lượt xem: 1411 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình Windows - Chương 1: Tổng quan về Lập trình Windows và thư viện MFC, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 1 Tổng quan về Lập trình Windows và thư viện MFC GV: Nguyễn Thị Mai Trang 2 Mục tiêu  Giới thiệu tổng quan về lập trình Windows  Giới thiệu thư viện lập trình MFC và mơi trường Visual C++  Qua chương này, sinh viên cĩ thể hiểu và vận dụng các lớp trong thư viện MFC để viết chương trình ở mức tạo một ứng dụng đơn giản nhất. GV: Nguyễn Thị Mai Trang 3 Nội dung  Tổng quan về Lập trình Windows  Thư viện lập trình MFC  Làm quen với Visual C++ 6.0 GV: Nguyễn Thị Mai Trang 4 Bài 1: Tổng quan về Lập trình Windows  Giao diện người dùng kiểu đồ họa: – Các ứng dụng Windows cĩ giao diện thống nhất • Cửa sổ hình chữ nhật • Thanh tiêu đề • Thanh thực đơn (menu) • Thanh cơng cụ (Toolbar) • Thanh cuộn (Scrollbar) • Hộp hội thoại (Dialog) • V GV: Nguyễn Thị Mai Trang 5 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 6 Bài 1: Tổng quan về Lập trình Windows  Tính đa nhiệm: – Mỗi chương trình chiếm một phần tài nguyên của hệ thống và cĩ một phần bộ nhớ thường trú – Nhiều chương trình cĩ thể được kích hoạt chạy cùng một lúc – Tư tưởng hướng đối tượng: các cửa sổ ứng dụng chính và các cửa sổ con là các đối tượng của lớp cửa sổ được đăng ký trước.  Giao diện đồ họa độc lập thiết bị – Cho phép tạo các đối tượng đồ họa và định dạng văn bản – Chương trình viết cho Windows khơng điều khiển trực tiếp thiết bị xuất ra màn hình, máy in mà thơng qua một ngơn ngữ lập trình đồ họa gọi là Giao diện thiết bị đồ họa (Graphics device Interface – GDI) GV: Nguyễn Thị Mai Trang 7 Bài 1: Tổng quan về Lập trình Windows  Kiến trúc hướng thơng điệp (message driven): – Windows và các ứng dụng Windows hoạt động theo cơ chế truyền – nhận thơng điệp. – Các hoạt động của chương trình thay đổi tùy theo thơng điệp nhận được. – Thơng điệp được truyền qua lại giữa những ứng dụng và cửa sổ, giữa các ứng dụng với nhau. – Cửa sổ ứng dụng được tự động vẽ lại mỗi khi cĩ sự thay đổi về kích thước. Điều này được thực hiện nhờ hệ điều hành gởi thơng điệp cho chương trình. GV: Nguyễn Thị Mai Trang 8 Bài 1: Tổng quan về Lập trình Windows  Tài nguyên: – Biểu tượng (icons). – Con trỏ (cursors). – Hình ảnh (Bitmaps). – Bảng các chuỗi hằng (string tables). – Bảng phím tắt (Accelerator). – Hộp hội thoại (Dialog) – Thanh thực đơn (menu) – Thanh cơng cụ (toolbar) – Siêu văn bản (HTML). GV: Nguyễn Thị Mai Trang 9 Bài 1: Tổng quan về Lập trình Windows  Tài nguyên (tt) – Tài nguyên được Windows cung cấp sẵn (tài nguyên chuẩn). – Tài nguyên do người sử dụng tạo thơng qua một tập tin tài nguyên cĩ phần mở rộng là .rc (Resource Script) – Mơi trường lập trình Windows cung cấp cơng cụ để người sử dụng dễ dàng tạo, soạn thảo nội dung các tài nguyên. GV: Nguyễn Thị Mai Trang 10 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 11 Bài 1: Tổng quan về Lập trình Windows  Giao diện lập trình ứng dụng API (Application Programming Interface): – Là những hàm mà hệ điều hành Windows cung cấp để cho các ứng dụng cĩ thể sử dụng truy cập các tài nguyên trong hệ thống. – Những hàm trên được chứa trong các thư viện liên kết động (Dinamic Link Library – DLL) của hệ thống và mọi ứng dụng đều cĩ thể truy cập đến các hàm đĩ. – Các chương trình ứng dụng sử dụng các hàm API thơng qua các lời gọi hàm. – Trong API cĩ một số hàm cĩ chức năng duy trì sự độc lập thiết bị đồ họa, các hàm này gọi là giao diện thiết bị đồ họa GDI (Graphics Device Interface). GV: Nguyễn Thị Mai Trang 12 Bài 1: Tổng quan về Lập trình Windows  Cơ chế gởi – nhận thơng điệp – Mọi sự kiện xảy ra trên một chương trình Windows đều thơng qua những thơng điệp (messages). – Thơng điệp phát sinh khi: nhấn một nút trên bàn phím, di chuyển hoặc nhấn chuột, thay đổi kích thước cửa sổV – Với mỗi thơng điệp nhận được, chương trình ứng dụng sẽ cĩ hành động thích hợp đáp ứng với thơng điệp. GV: Nguyễn Thị Mai Trang 13 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 14 Bài 1: Tổng quan về Lập trình Windows  Cĩ hai dạng thơng điệp: – Thơng điệp được gởi vơ hàng đợi thơng điệp để chờ xử lý (queue message): bao gồm các thơng điệp được phát sinh từ bàn phím, chuột (WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, WM_CHAR,V) • Windows dùng một hàng đợi để chứa thơng điệp nhận được, mỗi một chương trình đều cĩ một hàng đợi chứa thơng điệp riêng. • Windows sẽ chuyển thơng điệp từ hàng đợi chứa thơng điệp của hệ thống đến hàng đợi chứa thơng điệp của chương trình. • Hàng đợi chứa thơng điệp của chương trình chịu trách nhiệm giữ tất cả các thơng điệp của tất cả các cửa sổ thuộc chương trình. GV: Nguyễn Thị Mai Trang 15 Bài 1: Tổng quan về Lập trình Windows  Thơng điệp được gởi trực tiếp đến thủ tục xử lý khơng qua hàng đợi (nonqueue message), bao gồm các thơng điệp thời gian, thơng điệp vẽ, và thơng điệp thốt như WM_TIMER, WM_PAINT, WM_QUIT.  Xử lý thơng điệp: – Một ứng dụng phải xĩa và xử lý những thơng điệp được gởi tới hàng đợi của ứng dụng đĩ. – Đối với một ứng dụng đơn tiểu trình thì sử dụng một vịng lặp thơng điệp (message loop) trong hàm WinMain để nhận thơng điệp từ hàng đợi và gởi tới thủ tục xử lý cửa sổ tương ứng. – Với những ứng dụng đa tiểu trình thì mỗi một tiểu trình cĩ tạo cửa sổ thì sẽ cĩ một vịng lặp thơng điệp để xử lý thơng điệp của những cửa sổ trong tiểu trình đĩ. GV: Nguyễn Thị Mai Trang 16 Bài 1: Tổng quan về Lập trình Windows Một số thơng điệp Windows – WM_CHAR: Một ký tự nhập từ bàn phím – WM_CREATE: Một cửa sổ được tạo. – WM_DESTROY: Một cửa sổ được hủy. – WM_LBUTTONDOWN: Nhấn phím trái chuột – WM_LBUTTONUP: Nhả phím chuột – WM_PAINT: Một cửa sổ được vẽ lại – WM_QUIT: Kết thúc ứng dụng – WM_SIZE: Thay đổi kích thước cửa sổ – WM_TIMER: sự kiện về thời gian – V GV: Nguyễn Thị Mai Trang 17 Bài 1: Tổng quan về Lập trình Windows  Trình tự thực hiện một chương trình Windows – Đăng ký lớp cửa sổ – Tạo cửa sổ – Hiển thị cửa sổ – Xử lý các thơng điệp nhờ vịng lặp message và thủ tục cửa sổ GV: Nguyễn Thị Mai Trang 18 Bài 1: Tổng quan về Lập trình Windows  Source code một chương trình Windows GV: Nguyễn Thị Mai Trang 19 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 20 Bài 1: Tổng quan về Lập trình Windows GV: Nguyễn Thị Mai Trang 21 Bài 1: Tổng quan về Lập trình Windows  Kết quả hiển thị GV: Nguyễn Thị Mai Trang 22 Bài 1: Tổng quan về Lập trình Windows  Hàm WinMain int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) Handle đến chương trình hiện hành Tham số dòng lệnh Cách hiển thị cửa sổ (SW_SHOWNORMAL hoặc SW_SHOWMINNOACTIVE) Handle đến chương trình trước đó GV: Nguyễn Thị Mai Trang 23 Bài 1: Tổng quan về Lập trình Windows  Chức năng của hàm WinMain – Định nghĩa lớp cửa sổ ứng dụng. – Đăng ký lớp cửa sổ vừa định nghĩa. – Tạo ra thể hiện cửa sổ của lớp đã cho. – Hiển thị cửa sổ. GV: Nguyễn Thị Mai Trang 24 Bài 1: Tổng quan về Lập trình Windows  Hàm WndProc LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ); Định danh cửa sổ Định danh thơng điệp Thơng tin bổ sung kèm theo thơng điệp GV: Nguyễn Thị Mai Trang 25 Bài 1: Tổng quan về Lập trình Windows  Chức năng của hàm WndProc – Xử lý tất cả các thơng điệp cĩ liên quan đến cửa sổ – Một chương trình Windows cĩ thể chứa nhiều hơn một hàm xử lý cửa sổ. – Một hàm xử lý cửa sổ luơn kết hợp với một lớp cửa sổ đặc thù. – Hàm xử lý cửa sổ thường được đặt tên là WndProc. – Hàm WndProc cĩ chức năng giao tiếp với bên ngồi, tức là với Windows, tồn bộ các thơng điệp gởi đến cửa sổ đều được xử lý qua hàm này. GV: Nguyễn Thị Mai Trang 26 Bài 1: Tổng quan về Lập trình Windows  Cấu trúc lớp cửa sổ Typedef struct _WNDCLASSEX{ UINT cbSize; //kích thước của cấu trúc UINT style; //kiểu lớp WNDPROC lpfnWndProc;//con trỏ đến thủ tục cửa sổ int cbClsExtra;//các byte phụ trội để thêm vào cấu trúc WNDCLASS khi đăng ký int cbWndExtra; ;//các byte phụ trội để thêm vào các đối tượng cửa sổ được tạo bởi lớp này HANDLE hInstance; //istance làm chủ class này HICON hIcon; //biểu tương khi cửa sổ hiển thị HCURSOR hCursor; //con trỏ chuột HBRUSH hbrBackground; //màu nền LPCTSTR lpszMenuName; //tên menu LPCTSTR lpszClassName; //tên lớp nhận biết WNDCLASS này cho hệ thống } WNDCLASSEZ; GV: Nguyễn Thị Mai Trang 27 Bài 1: Tổng quan về Lập trình Windows  Đăng ký lớp cửa sổ – Sau khi định nghĩa một lớp cửa sổ, phải đăng ký lớp cửa sổ đĩ bằng hàm RegisterClass – ATOM RegisterClass( CONST WNDCLASS * lpWndClass ); GV: Nguyễn Thị Mai Trang 28 Bài 1: Tổng quan về Lập trình Windows  Hàm tạo cửa sổ HWND hwnd = CreateWindow ( ClassName, // Tên lớp cửa sổ đã đăng ký WindowName, // tiêu đề cửa sổ Style, // kiểu cửa sổ x, // Vị trí ngang ban đầu y, // Vị trí dọc ban đầu Width, // Độ rộng ban đầu Height, // Độ cao ban đầu Parent, // Định danh của cửa sổ cha Menu, // Định danh của menu Instance, // Định danh thể hiện ứng dụng Param); // Các tham số ban đầu GV: Nguyễn Thị Mai Trang 29 Bài 1: Tổng quan về Lập trình Windows  Xử lý thơng điệp while ( GetMessage(&msg, NULL, 0 ,0) ) { TranslateMessage (&msg); DispatchMessage (&msg); } – Hàm GetMessage sẽ trả về 0 nếu msg chứa thơng điệp cĩ định danh WM_QUIT (0x0012), khi đĩ vịng lặp thơng điệp ngưng và ứng dụng kết thúc. Ngược lại thì hàm sẽ trả về một giá trị khác 0 với các thơng điệp khác GV: Nguyễn Thị Mai Trang 30 Bài 1: Tổng quan về Lập trình Windows  Cấu trúc của thơng điệp typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; Định danh của cửa sổ phát sinh thơng điệp Định danh của thơng điệp thơng tin phụ thuộc vào từng thơng điệp cụ thể Thời gian đặt thơng điệp trong hàng đợiTọa độ của chuột GV: Nguyễn Thị Mai Trang 31 Bài 1: Tổng quan về Lập trình Windows  Cấu trúc của thơng điệp (tt) – hwnd: Định danh của cửa sổ mà thơng điệp phát sinh. – message : Định danh của thơng điệp, ví dụ như thơng điệp phát sinh khi bấm nút chuột trái là WM_LBUTTONDOWN cĩ giá trị 0x0201. – wParam : Tham số 32-bit chứa các thơng tin phụ thuộc vào từng thơng điệp cụ thể. – lParam : Tham số 32-bit phụ thuộc vào thơng điệp. – time : Thời gian đặt thơng điệp trong hàng đợi. – pt : Tọa độ của chuột khi đặt thơng điệp vào hàng đợi GV: Nguyễn Thị Mai Trang 32 Bài 1: Tổng quan về Lập trình Windows  Quy ước đặt tên Hungary: dùng tiếp đầu ngữ để mơ tả kiểu dữ liệu, theo sau là tên biến b BOOL c or ch char clr COLORREF cx, cy horizontal or vertical dw DWORD h Handle l LONG (long int) n int p Pointer sz chuỗi kết thúc bởi ‘\0’ w WORD GV: Nguyễn Thị Mai Trang 33 Bài 2: Thư viện lập trình MFC  Thư viện lập trình MFC (Microsoft Foundation Class library) là một cơng cụ quan trọng để xây dựng nhanh những chương trình ứng dụng trên nền Windows bằng ngơn ngữ C++  MFC được viết ra với mục đích làm cho việc lập trình Windows dễ dàng hơn bằng cách cung cấp những lớp đối tượng với những hành vi và thuộc tính (property) dưới dạng những biến handle giải quyết mọi cơng việc thơng dụng trong chương trình Windows GV: Nguyễn Thị Mai Trang 34 Thư viện lập trình MFC  Cụ thể, MFC cung cấp một khuơn mẫu ứng dụng (application framework) cho việc lập trình trên Windows.  Framework này cung cấp hầu hết các mã cần thiết cho việc quản lý cửa sổ, các trình đơn, hộp hội thoại, thực hiện các thao tác xuất nhập cơ bản, lưu trữ tập hợp các đối tượng dữ liệu GV: Nguyễn Thị Mai Trang 35 Thư viện lập trình MFC  Các tiện ích của thư viện lập trình MFC – Cung cấp những đối tượng dễ dàng sử dụng – MFC chứa đựng hầu hết các cấu trúc dữ liệu quan trọng và các lời gọi hàm API (Application Program Interface) – Bao gồm các lớp đối tượng với sự gĩi gọn về mã lệnh và dữ liệu trong một lớp và sự kế thừa lớp. – Cung cấp các hàm thư viện, các điều khiển, các thơng điệp, đồ họa GDI, trình đơn và các hộp hội thoạiV GV: Nguyễn Thị Mai Trang 36 Thư viện lập trình MFC  Các lớp ứng dụng – Các lớp ứng dụng chính trong MFC bao gồm việc khởi tạo, chạy và chấm dứt ứng dụng – Thư viện lập trình MFC cĩ hơn 200 lớp, chia làm nhiều nhĩm thực hiện các cơng việc đặc trưng như: quản lý ứng dụng, kiểu dữ liệu, các ơ điều khiển, khung đối thoại, đồ họaV GV: Nguyễn Thị Mai Trang 37 Thư viện lập trình MFC GV: Nguyễn Thị Mai Trang 38 Thư viện lập trình MFC GV: Nguyễn Thị Mai Trang 39 Thư viện lập trình MFC  Các lớp tiêu biểu Lớp CButton Lớp CColorDialog Lớp CComboBox Lớp CDaoDatabase Lớp CDaoRecordset Lớp CDaoTableDef Lớp CDC Lớp CDialog Lớp CEdit Lớp CFile Lớp CFontDialog Lớp CImageList Lớp CListCtrl GV: Nguyễn Thị Mai Trang 40 Thư viện lập trình MFC  Các lớp tiêu biểu (tt) Lớp CMDIChildWnd Lớp CMDIFrameWnd Lớp CMenu Lớp CPropertyPage Lớp CPropertySheet Lớp CPtrList Lớp CRichEditCtrl Lớp CSpinButtonCtrl Lớp CStatic  Lớp CTypedPtrList Lớp CToolBar  Lớp CTabCtrl Lớp CTreeCtrl Lớp CWinApp GV: Nguyễn Thị Mai Trang 41 Thư viện lập trình MFC  Source code một chương trình MFC GV: Nguyễn Thị Mai Trang 42 Thư viện lập trình MFC GV: Nguyễn Thị Mai Trang 43 Thư viện lập trình MFC GV: Nguyễn Thị Mai Trang 44 Thư viện lập trình MFC  Kết quả hiển thị GV: Nguyễn Thị Mai Trang 45 Bài 3: Visual C++ 6.0  Tạo Project mới: khởi động Visual C++, từ menu File, chọn NewV GV: Nguyễn Thị Mai Trang 46 Bài 3: Visual C++ 6.0  Chọn loại ứng dụng thích hợp, các bước kế tiếp chọn tùy theo yêu cầu của ứng dụng hoặc cĩ thể để mặc định GV: Nguyễn Thị Mai Trang 47 Bài 3: Visual C++ 6.0  Cửa sổ làm việc Workspace Toolbox GV: Nguyễn Thị Mai Trang 48 Bài 3: Visual C++ 6.0 Hình ảnh tổng thể của project dưới dạng các lớp Những tập tin có trong project Những tài nguyên có trong project GV: Nguyễn Thị Mai Trang 49 Bài tập  Bài tập 1: viết chương trình tạo một cửa sổ ứng dụng như sau: GV: Nguyễn Thị Mai Trang 50 Bài tập Hướng dẫn GV: Nguyễn Thị Mai Trang 51 Bài tập GV: Nguyễn Thị Mai Trang 52 Bài tập GV: Nguyễn Thị Mai Trang 53 Bài tập GV: Nguyễn Thị Mai Trang 54 Bài tập GV: Nguyễn Thị Mai Trang 55 Bài tập GV: Nguyễn Thị Mai Trang 56 Bài tập Các giá trị của m_nCmdShow: SW_SHOWNORMAL, SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED GV: Nguyễn Thị Mai Trang 57 Bài tập GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 2 Thiết bị ngữ cảnh và các phương pháp vẽ GV: Nguyễn Thị Mai Trang 2 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Mục tiêu  Giới thiệu giao diện thiết bị đồ họa GDI, một cơng cụ rất quan trọng để vẽ các đối tượng hình học, hình ảnh và văn bản.  Giới thiệu một số hàm trong thư viện đồ họa GDI để vận dụng vào việc lập trình.  Qua chương này, sinh viên cĩ thể xây dựng được các ứng dụng xuất văn bản, hình ảnh và vẽ được một số đối tượng theo yêu cầu. GV: Nguyễn Thị Mai Trang 3 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Nội dung  Thiết bị ngữ cảnh  Các phương pháp vẽ  Font và văn bản  Sử dụng Memory Device Context  Hiển thị hình ảnh Một số lớp, cấu trúc dữ liệu giao diên đồ họa GV: Nguyễn Thị Mai Trang 4 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bài 1: Thiết bị ngữ cảnh  Giới thiệu giao diện thiết bị đồ họa (GDI)  Hệ thống tọa độ  Các đối tượng thiết bị ngữ cảnh GV: Nguyễn Thị Mai Trang 5 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Giới thiệu giao diện thiết bị đồ họa  GDI là ththư viện cung cấp các hàm và các cấu trúc dữ liệu cần thiết để ứng dụng tạo ra những kết xuất dưới dạng đồ họa (hiển thị lên màn hình, in ra máy in,U)  Các hàm GDI cho phép vẽ đường thẳng, đường cong, các hình đa giác, xuất ký tự, hiển thị ảnh bitmap, in ấn,U  GDI khơng tương tác trực tiếp với thiết bị phần cứng, mà thơng qua các trình điều khiển thiết bị. GV: Nguyễn Thị Mai Trang 6 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Giới thiệu giao diện thiết bị đồ họa  Các thiết bị đồ họa (Graphics device): Là những thiết bị cho phép thể hiện các kết xuất dạng đồ họa trên đĩU – Thiết bị vật lý (physical device): là những thiết bị thật như màn hình, cửa sổ, máy in,U – Thiết bị “ảo” (logical device): là các thiết bị được giả lập trong bộ nhớ, cịn gọi là “memory device”, cĩ tác dụng mơ phỏng thiết bị vật lý GV: Nguyễn Thị Mai Trang 7 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Hệ thống tọa độ GV: Nguyễn Thị Mai Trang 8 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Hệ thống tọa độ (tt)  Hệ thống tọa độ mặc định là MM_TEXT Muốn sử dụng một hệ thống tọa độ khác, gọi hàm CDC::SetMapMode  Ví dụ: GV: Nguyễn Thị Mai Trang 9 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các đối tượng thiết bị ngữ cảnh  Bút vẽ (pen) : để vẽ các đường thẳng và hình dáng  Chổi vẽ (brush): để tơ các vùng của hình vẽ trên màn hình  Kiểu chữ (font) : hiển thị văn bản Màu (colors). GV: Nguyễn Thị Mai Trang 10 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thuộc tính của thiết bị ngữ cảnh GV: Nguyễn Thị Mai Trang 11 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các lớp thiết bị ngữ cảnh GV: Nguyễn Thị Mai Trang 12 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các lớp thiết bị ngữ cảnh  CPaintDC: Vẽ trong vùng client của cửa sổ, đáp ứng với sự kiện WM_PAINT, dùng trong hàm OnPaint()  CClientDC: tạo ra một ngữ cảnh thiết bị vẽ trong vùng client của cửa số, cĩ thể sử dụng ngồi hàm OnPaint().  CWindowDC: Vẽ trên cửa sổ, kể cả vùng client và non-client  CMetaFileDC: Vẽ một GDI metafile GV: Nguyễn Thị Mai Trang 13 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bài 2: Các phương pháp vẽ  Quy trình vẽ  Tạo và sử dụng các đối tượng thiết bị ngữ cảnh  Các thao tác vẽ cơ bản GV: Nguyễn Thị Mai Trang 14 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Quy trình vẽ Mượn DC (Device Context)  Thực hiện các thao tác vẽ  Trả lại DC cho Windows  Các hàm mượn và trả DC thơng dụng: – BeginPaint và EndPaint – GetDC và ReleaseDC GV: Nguyễn Thị Mai Trang 15 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Quy trình vẽ (tt) GV: Nguyễn Thị Mai Trang 16 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Quy trình vẽ (tt)  Ngồi ra, cĩ thể sử dụng đối tượng thuộc các lớp thiết bị ngữ cảnh theo hai cách: – Khai báo đối tượng, sử dụng phương thức thiết lập của lớp (khơng cần hủy đối tượng) – Tạo một đối tượng của lớp thiết bị ngữ cảnh (phải hủy sau khi sử dụng) GV: Nguyễn Thị Mai Trang 17 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo một đối tượng thiết bị ngữ cảnh  Các lớp đối tượng thiết bị ngữ cảnh dùng để vẽ bao gồm: – CPen: cơng cụ vẽ điểm hoặc đường thẳng – CBrush: cơng cụ tơ màu – CFont: cơng cụ tạo phơng chữ GV: Nguyễn Thị Mai Trang 18 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Pen (bút vẽ)  Tạo bút vẽ GV: Nguyễn Thị Mai Trang 19 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Pen (bút vẽ)  Một số nét vẽ GV: Nguyễn Thị Mai Trang 20 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bảng màu GV: Nguyễn Thị Mai Trang 21 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bảng màu GV: Nguyễn Thị Mai Trang 22 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Brush (Cọ tơ màu)  Tạo một cọ tơ màu GV: Nguyễn Thị Mai Trang 23 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Brush (Cọ tơ màu)  Tạo một cọ tơ màu GV: Nguyễn Thị Mai Trang 24 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Brush (Cọ tơ màu) Một số kiểu HatchBrush GV: Nguyễn Thị Mai Trang 25 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo một đối tượng thiết bị ngữ cảnh  Chọn đối tượng thiết bị ngữ cảnh – Sử dụng hàm SelectObject để chọn một đối tượng thiết bị ngữ cảnh – Các đối tượng cĩ thể được chọn với SelectObject • Pens • Brushes • Fonts • Bitmaps • Palettes • Regions GV: Nguyễn Thị Mai Trang 26 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo một đối tượng thiết bị ngữ cảnh  Chọn đối tượng thiết bị ngữ cảnh (tt) – Sử dụng hàm SelectStockObject để chọn một đối tượng thiết bị ngữ cảnh chuẩn – GV: Nguyễn Thị Mai Trang 27 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số đối tượng GDI chuẩn GV: Nguyễn Thị Mai Trang 28 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Vẽ điểm, đường thẳng, đường cong – SetPixel: vẽ một điểm – MoveTo: Đặt vị trí hiện hành trước khi vẽ. – LineTo : vẽ đoạn thẳng từ vị trí hiện tại đến điểm cuối đoạn thẳng – Polyline : Vẽ đường thẳng gấp khúc – PolylineTo: Vẽ đoạn thẳng và đặt vị trí hiện hành tại cuối đoạn thẳng vừa vẽ. – Arc : Vẽ một cung – ArcTo : Vẽ một cung và đặt vị trí hiện hành tại điểm cuối cung vừa vẽ. – PolyBezier: Vẽ một hoặc nhiều đường cong bất kỳ. – PolyBezierTo: Vẽ đường cong và đặt vị trí hiện hành tại cuối đường cong vừa vẽ. GV: Nguyễn Thị Mai Trang 29 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  PolyBezier GV: Nguyễn Thị Mai Trang 30 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Arcs GV: Nguyễn Thị Mai Trang 31 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Arcs – Mặc định, một cung được vẽ ngược chiều kim đồng hồ. – Để thay đổi chiều vẽ cung, sử dụng hàm: int SetArcDirection(int nArcDirection); GV: Nguyễn Thị Mai Trang 32 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 33 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 34 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Vẽ các đối tượng hình học – Chord – Pie – Ellipse – Rectangle – RoundRect GV: Nguyễn Thị Mai Trang 35 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Ellipse và Circle GV: Nguyễn Thị Mai Trang 36 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Round Rectangles và Round Squares GV: Nguyễn Thị Mai Trang 37 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Pies GV: Nguyễn Thị Mai Trang 38 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Pies GV: Nguyễn Thị Mai Trang 39 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 40 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 41 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 42 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản Một số ví dụ GV: Nguyễn Thị Mai Trang 43 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các thao tác vẽ cơ bản  Kết quả GV: Nguyễn Thị Mai Trang 44 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bài 3: Font và văn bản  Giới thiệu một số hàm vẽ văn bản  Font chữ: – Các hàm tạo font chữ – Sử dụng font Một số ví dụ GV: Nguyễn Thị Mai Trang 45 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số hàm vẽ văn bản  DrawText  TextOut  GetTextMetrics  SetTextAlign  SetTextJustification  SetTextColor  SetBkColor GV: Nguyễn Thị Mai Trang 46 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Các hàm tạo font chữ – CreateFont – CreateFontIndirect – CreatePointFont – CreatePointFontIndirect GV: Nguyễn Thị Mai Trang 47 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreateFont Chiều cao, rộng Gĩc giữa hai ký tự Phương và chiều Kiểu in đậm, nghiêng, gạch dưới, gạch ngang thân chữ Tên font chữ GV: Nguyễn Thị Mai Trang 48 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreateFont  Ví dụ GV: Nguyễn Thị Mai Trang 49 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreatePointFont  Ví dụ GV: Nguyễn Thị Mai Trang 50 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Cấu trúc LOGFONT GV: Nguyễn Thị Mai Trang 51 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreatePointFontIndirect  Tạo font chữ với cấu trúc LOGFONT GV: Nguyễn Thị Mai Trang 52 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreatePointFontIndirect  Ví dụ GV: Nguyễn Thị Mai Trang 53 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreateFontIndirect – Tạo font chữ với cấu trúc LOGFONT GV: Nguyễn Thị Mai Trang 54 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ CFont::CreateFontIndirect  Ví dụ GV: Nguyễn Thị Mai Trang 55 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số ví dụ GV: Nguyễn Thị Mai Trang 56 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số ví dụ – Kết quả hiển thị GV: Nguyễn Thị Mai Trang 57 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số ví dụ GV: Nguyễn Thị Mai Trang 58 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số ví dụ – Kết quả hiển thị GV: Nguyễn Thị Mai Trang 59 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bài 4: Sử dụng Memory Device Context  Khái niệm về Memory Device Context (MDC)  Tạo và sử dụng MDC GV: Nguyễn Thị Mai Trang 60 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Memory Device Context (MDC)  Nếu thực hiện nhiều thao tác vẽ trực tiếp trên thiết bị ngữ cảnh của màn hình → màn hình bị giật → Khắc phục: sử dụng MDC (cịn gọi là thiết bị ngữ cảnh ảo). Memory device context (MDC) là một thiết bị ảo khơng gắn với một thiết bị xuất cụ thể nào. MDC được sử dụng như một thiết bị ngữ cảnh trung gian để vẽ trước khi xuất ra màn hình. GV: Nguyễn Thị Mai Trang 61 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo và sử dụng MDC – Tạo ra một thiết bị ngữ cảnh ảo (MDC) trong bộ nhớ tương thích với thiết bị ngữ cảnh thật, sử dụng hàm CreateCompatibleDC – Bề mặt hiển thị ban đầu của MDC rất nhỏ, chỉ là một pixel. Do đĩ, cần chọn một đối tượng bitmap GDI vào MDC. – Thực hiện các thao tác vẽ trên MDC này – Chép nội dung của MDC vào DC thật. – Hủy MDC GV: Nguyễn Thị Mai Trang 62 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo và sử dụng MDC GV: Nguyễn Thị Mai Trang 63 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Tạo và sử dụng MDC GV: Nguyễn Thị Mai Trang 64 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Bài 5: Hiển thị hình ảnh  Sử dụng bitmap từ tài nguyên  Load bitmap từ file  Sao chép bitmap  Hiển thị bitmap GV: Nguyễn Thị Mai Trang 65 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sử dụng bitmap từ tài nguyên  Import ảnh bitmap vào Resource – Vào Resource View, chọn Import. – Nếu ảnh bitmap nhiều hơn 256 màu thì khơng thể xem hay sửa đổi trong Resource View của Visual C++.  Load ảnh bitmap từ Resource – Sử dụng hàm LoadBitmap của lớp CBitmap để load ảnh bitmap trong resource. – Hủy đối tượng bitmap sau khi sử dụng bằng hàm DeleteObject. GV: Nguyễn Thị Mai Trang 66 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sử dụng bitmap từ tài nguyên  Ví dụ: GV: Nguyễn Thị Mai Trang 67 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Load bitmap từ file  Sử dụng hàm LoadImage GV: Nguyễn Thị Mai Trang 68 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap  Hàm CDC::BitBlt: chép nội dung bitmap từ DC nguồn sang DC đích. – – x, y: gĩc trái trên của vùng DC đích – nWidth, nHeight: kích thước vùng DC đích – pSrcDC: con trỏ đến DC nguồn – xSrc, yScr: gĩc trái trên của vùng ảnh được chép trong DC nguồn – dwRop: chế độ chép ảnh GV: Nguyễn Thị Mai Trang 69 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap  Chế độ chép ảnh GV: Nguyễn Thị Mai Trang 70 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap  Chế độ chép ảnh GV: Nguyễn Thị Mai Trang 71 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap GV: Nguyễn Thị Mai Trang 72 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap  Hàm CDC:: StrechBlt giống như hàm BitBlt, cho phép phĩng to hay thu nhỏ ảnh - nSrcWidth, nSrcHeight: kích thước vùng DC nguồn GV: Nguyễn Thị Mai Trang 73 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Sao chép bitmap  Ví dụ GV: Nguyễn Thị Mai Trang 74 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số lớp, cấu trúc dữ liệu giao diên đồ họa  CPoint: Lớp đối tượng điểm – tương ứng cấu trúc POINT  CRect: Lớp đối tượng hình chữ nhật– tương ứng cấu trúc RECT GV: Nguyễn Thị Mai Trang 75 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ  CSize: Lớp đối tượng kích thước - tương ứng cấu trúc SIZE  CRgn: Lớp đối tượng quản lý region – một vùng ảnh cĩ hình dạng bất kỳ - tương ứng cấu trúc HRGN Một số lớp, cấu trúc dữ liệu giao diên đồ họa GV: Nguyễn Thị Mai Trang 76 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ  CBrush: Lớp đối tượng quản lý brush – cơng cụ tơ màu - tương ứng cấu trúc LOGBRUSH  CPen: Lớp đối tượng quản lý pen – cơng cụ vẽ nét - tương ứng cấu trúc LOGPEN Một số lớp, cấu trúc dữ liệu giao diên đồ họa GV: Nguyễn Thị Mai Trang 77 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ  CBitmap: Lớp đối tượng quản lý bitmap - tương ứng cấu trúc BITMAP Một số lớp, cấu trúc dữ liệu giao diên đồ họa GV: Nguyễn Thị Mai Trang 78 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số hàm thuộc lớp CDC  CreateCompatibleDC( CDC* pDC ); Tạo đối tượng DC tương thích với một DC cĩ sẵn (pDC)  DeleteDC( ); Hủy bỏ đối tượng DC.  SetBkColor( COLORREF crColor ); Ðặt màu nền cho DC.  GetBkColor( ); Trả về giá trị màu nền của DC.  SetTextColor( COLORREF crColor ); Ấn định màu hiển thị các nội dung văn bản trên DC.  GetTextColor( ); Trả về giá trị màu đang dùng của văn bản trên DC.  FloodFill ( int x, int y, COLORREF crColor ); Tơ màu một vùng khép kín bởi biên màu crColor bao quanh điểm (x,y) bởi chổi tơ (brush) hiện hành GV: Nguyễn Thị Mai Trang 79 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số hàm thuộc lớp CDC  SetBkMode ( int nBkMode ); Ấn định chế độ hiển thị nền văn bản – TRANSPARENT : Nền chữ hiển thị trong suốt. – OPAQUE : Chữ hiển thị cĩ màu nền.  GetBkMode( ); Lấy chế độ hiển thị văn bản của DC  TextOut ( intx, y , LPCTSTRlpszString, intnCount ); Hiển thị nội dung chuỗi văn bản lên giao diện đồ họa của DC.  DrawText ( LPCTSTRlpszString, intnCount, LPRECTlpRect, UINT nFormat); In nội dung chuỗi lên giao diện đồ họa của DC cĩ canh lề GV: Nguyễn Thị Mai Trang 80 Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ Một số hàm thuộc lớp CDC  FillRect ( LPCRECT lpRect, CBrush*pBrush); Tơ màu vùng hình chữ nhật  Draw3dRect ( LPCRECTlpRect, COLORREF clrTopLeft, COLORREF clrBottomRight); Vẽ hình chữ nhật 3 chiều  DrawEdge ( LPRECTlpRect, UINT nEdge, /*Cách vẽ trên các gờ (trong, ngồi) cạnh*/,UINTnFlags /* Các cạnh được vẽ*/); Vẽ khung chữ nhật với hiệu ứng 3 chiều.  DrawState ( CPoint point,CSize size, CBitmap*pBitmap, UINT nFlags, CBrush*pBrush); Vẽ bitmap hoặc icon  DrawIcon ( intx, int y, HICON hIcon); ); Vẽ icon hIcon lên DC GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 3 Các sự kiện - Xử lý sự kiện trong Windows GV: Nguyễn Thị Mai Trang 2 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mục tiêu  Giới thiệu những sự kiện xảy ra trên Windows – Sự kiện chuột, bàn phím – Các sự kiện khác  Nắm bắt và xử lý những sự kiện gởi nhận trên Windows.  Qua chương này, sinh viên cĩ thể viết chương trình xử lý những sự kiện xảy ra trên cửa sổ ứng dụng. GV: Nguyễn Thị Mai Trang 3 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Nội dung  Các sự kiện về chuột (mouse)  Các sự kiện về bàn phím (Keyboard)  Các sự kiện khác GV: Nguyễn Thị Mai Trang 4 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 1: Các sự kiện về chuột (mouse)  Sự kiện chuột trong vùng client  Sự kiện chuột ngồi vùng client (non- client)  Thay đổi con trỏ chuột GV: Nguyễn Thị Mai Trang 5 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột trong vùng client  Các thơng điệp sự kiện chuột – WM_LBUTTONDOWN: Nút trái chuột được nhấn. – WM_LBUTTONUP: Nút trái chuột được nhả. – WM_LBUTTONDBLCLK: Nút trái chuột được nhấn đúp. – WM_MBUTTONDOWN: Nút giữa chuột được nhấn. – WM_MBUTTONUP: Nút giữa chuột được nhả. – WM_MBUTTONDBLCLK: Nút giữa chuột được nhấn đúp. GV: Nguyễn Thị Mai Trang 6 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột trong vùng client  Các thơng điệp sự kiện chuột (tt) – WM_RBUTTONDOWN: Nút chuột phải được nhấn. – WM_RBUTTONUP: Nút chuột phải được nhả – WM_RBUTTONDBLCLK: Nút chuột phải được nhấn đúp. – WM_MOUSEMOVE: Di chuyển chuột trên cửa sổ ứng dụng GV: Nguyễn Thị Mai Trang 7 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm xử lý sự kiện chuột  ON_WM_LBUTTONDOWN OnLButtonDown  ON_WM_LBUTTONUP OnLButtonUp  ON_WM_LBUTTONDBLCLK OnLButtonDblClk  ON_WM_MBUTTONDOWN OnMButtonDown  ON_WM_MBUTTONUP OnMButtonUp  ON_WM_MBUTTONDBLCLK OnMButtonDblClk  ON_WM_RBUTTONDOWN OnRButtonDown  ON_WM_RBUTTONUP OnRButtonUp  ON_WM_RBUTTONDBLCLK OnRButtonDblClk  ON_WM_MOUSEMOVE OnMouseMove GV: Nguyễn Thị Mai Trang 8 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Khai báo hàm cho các handler  nFlags: là tham số chỉ rõ trạng thái nút chuột và phím Shift , Ctrl được nhấn lúc sự kiện được phát sinh – MK_LBUTTON : Nút trái chuột được nhấn – MK_MBUTTON: Nút giữa chuột được nhấn – MK_RBUTTON: Nút phải chuột được nhấn. – MK_CONTROL: Phím Ctrl được nhấn – MK_SHIFT: Phím Shift được nhấn GV: Nguyễn Thị Mai Trang 9 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Ví dụ GV: Nguyễn Thị Mai Trang 10 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột ngồi vùng client (non-client)  Các thơng điệp sự kiện chuột vùng Non- Client – WM_NCLBUTTONDOWN: Nút trái chuột được nhấn. – WM_NCLBUTTONUP: Nút trái chuột được nhả. – WM_NCLBUTTONDBLCLK: Nút trái chuột được nhấn đúp. – WM_NCMBUTTONDOWN: Nút giữa chuột được nhấn. – WM_NCMBUTTONUP: Nút giữa chuột được nhả. – WM_NCMBUTTONDBLCLK: Nút giữa chuột được nhấn đúp. – WM_NCRBUTTONDOWN: Nút chuột phải được nhấn. – WM_NCRBUTTONUP: Nút chuột phải được nhả – WM_NCRBUTTONDBLCLK: Nút chuột phải được nhấn đúp. – WM_NCMOUSEMOVE: Di chuyển chuột trên cửa sổ ứng dụng GV: Nguyễn Thị Mai Trang 11 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột ngồi vùng client (non-client)  Khai báo hàm cho các handler GV: Nguyễn Thị Mai Trang 12 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột ngồi vùng client (non-client) Một số giá trị của tham số nHitTest – HTCAPTION The title bar – HTCLOSE The close button – HTGROWBOX The restore button (same as HTSIZE) – HTHSCROLL The window's horizontal scroll bar – HTMENU The menu bar – HTREDUCE The minimize button – HTSIZE The restore button (same as HTGROWBOX) – HTSYSMENU The system menu box – HTVSCROLL The window's vertical scroll bar – HTZOOM The maximize button GV: Nguyễn Thị Mai Trang 13 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sự kiện chuột ngồi vùng client (non-client)  Thơng điệp WM_NCHITTEST – Khi một cửa sổ nhận một thơng điệp từ chuột, nĩ nhận thơng điệp WM_NCHITTEST – Thơng điệp này cho biết vùng nào trên cửa sổ xảy ra sự kiện chuột – Để biết được vùng nào xảy ra sự kiện chuột, ta khai báo như sau: GV: Nguyễn Thị Mai Trang 14 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số thơng điệp khác từ chuột  Khi một con trỏ di chuyển trên cửa sổ, cửa sổ sẽ nhận được thơng điệp WM_MOUSEMOVE  Khi con trỏ rời khỏi cửa sổ, cửa sổ sẽ nhận được thơng điệp WM_MOUSELEAVE  Khi con trỏ cịn nằm trên cửa sổ, cửa sổ sẽ nhận được thơng điệp WM_MOUSEHOVER GV: Nguyễn Thị Mai Trang 15 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Thay đổi con trỏ chuột  Để thay đổi con trỏ chuột, dùng hàm CWnd::SetCursor  Để load con trỏ chuột, dùng hàm CWnd::LoadCursor GV: Nguyễn Thị Mai Trang 16 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số dạng con trỏ chuẩn GV: Nguyễn Thị Mai Trang 17 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 2: Các sự kiện về bàn phím  Các thơng điệp sự kiện từ bàn phím  Các hàm xử lý sự kiện bàn phím GV: Nguyễn Thị Mai Trang 18 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các thơng điệp sự kiện từ bàn phím WM_KEYDOWN: Phím được nhấn. WM_KEYUP: Phím được nhả WM_SYSKEYDOWN: phím hệ thống (Alt, F10) được nhấn WM_SYSKEYUP: phím hệ thống (Alt, F10) được nhả GV: Nguyễn Thị Mai Trang 19 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Khai báo hàm cho các handler – nChar: mã ký tự được nhấn – nRepCnt: số lần nhấn phím – nFlags: tổ hợp cờ xác định xem cĩ phải phím Alt được nhấn cùng với phím khác khơng? GV: Nguyễn Thị Mai Trang 20 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Virtual Key Codes GV: Nguyễn Thị Mai Trang 21 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Virtual Key Codes GV: Nguyễn Thị Mai Trang 22 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Virtual Key Codes GV: Nguyễn Thị Mai Trang 23 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Virtual Key Codes GV: Nguyễn Thị Mai Trang 24 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm xử lý sự kiện bàn phím  GetKeyState  OnKeyDown  OnChar  PreTranslateMessage u GV: Nguyễn Thị Mai Trang 25 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm GetKeyState  Kiểm tra trạng thái các phím chức năng như Shift, Control, Alt,u – ::GetKeyState (VK_SHIFT) trả về giá trị <0 khi phím Shift được nhấn – ::GetKeyState (VK_CONTROL ) trả về giá trị <0 khi phím Ctrl được nhấn – ::GetKeyState (VK_MENU ) trả về giá trị <0 khi phím Alt được nhấn – ::GetKeyState (VK_NUMLOCK) – ::GetKeyState (VK_CAPITAL ) – ::GetKeyState (VK_SCROLL ) Trả về giá trị khác 0 nếu phím Num Lock, Caps Lock hoặc Scroll Lock được nhấn GV: Nguyễn Thị Mai Trang 26 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm GetKeyState  Ví dụ: GV: Nguyễn Thị Mai Trang 27 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm OnKeydown  Đáp ứng thơng điệp WM_KEYDOWN, khi người dùng nhấn một phím khơng phải là phím hệ thống GV: Nguyễn Thị Mai Trang 28 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm OnChar  Đáp ứng thơng điệp WM_CHAR, khi thơng điệp WM_KEYDOWN đã được dịch từ hàm TranslateMessage. Thơng điệp WM_CHAR cĩ chứa mã kí tự của phím được nhấn GV: Nguyễn Thị Mai Trang 29 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm OnChar  Ví dụ GV: Nguyễn Thị Mai Trang 30 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hàm PreTranslateMessage  Chuyển dịch thơng báo trước khi thơng báo được gởi đến GV: Nguyễn Thị Mai Trang 31 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 3: Các sự kiện khác  WM_TIMER  WM_HSCROLL  WM_VSCROLL  WM_CTLCOLOR  WM_DRAWITEM  WM_MEASUREITEM  WM_DELETEITEM  WM_CHARTOITEM  WM_VKEYTOITEM  WM_COMPAREITEM  u GV: Nguyễn Thị Mai Trang 32 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows WM_TIMER  Được gởi đến hàng đợi messages để gọi hàmTimerProc sau mỗi khoảng thời gian được chỉ định trong hàm SetTimer  Hàm SetTimer: dùng để cài đặt một bộ định giờ GV: Nguyễn Thị Mai Trang 33 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows WM_TIMER – nIDEvent :giá trị khác 0 để nhận dạng Timer – nElapse: khoảng thời gian gian nghỉ giữa hai lần gởi thơng điệp tính bằng mili giây – void (CALLBACK EXPORT* lpfnTimer) ( HWND, UINT, UINT, DWORD) ) • Hàm API xử lý sự kiện WM_TIMER. nếu chúng ta khai báo là NULL thì Windows sẽ gởi thơng điệp WM_TIMER vào hàng đợi thơng điệp của cửa sổ tương ứng. GV: Nguyễn Thị Mai Trang 34 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows WM_TIMER  Hàm TimerProc – hwnd: Handle đến cửa sổ kết hợp với timer – uMsg: WM_TIMER – idEvent: giá trị nhận dạng Timer – dwTime: thời gian hệ thống hoạt động, là giá trị trả về của hàm GetTickCount – Hàm KillTimer : hủy Timer GV: Nguyễn Thị Mai Trang 35 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows WM_TIMER  Ví dụ về cách sử dụng Timer GV: Nguyễn Thị Mai Trang 36 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm gởi, nhận thơng điệp sự kiện  GetMessage(): Lấy thơng báo ra khỏi hàng đợi  PreTranslateMessage(): chuyển dịch thơng báo trước khi thơng báo được gởi đến  TranslateMessage(): chuyển virtual-key messages sang character messages.  DispatchMessage(), SendMessage(): gởi thơng báo GV: Nguyễn Thị Mai Trang 37 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo các thơng báo cửa sổ riêng  Cĩ trên 70 thơng báo cửa sổ do hệ thống định nghĩa từ WM_NULL đến WM_USER  Cĩ thể định nghĩa các thơng báo riêng như sau: – #define WM_MYMSG1 WM_USER + 1 – Cĩ thể gởi các thơng báo này như các thơng báo cửa sổ bình thường: SendMessage(WM_MYMSG1, wParam, lParam); GV: Nguyễn Thị Mai Trang 38 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo các thơng báo cửa sổ riêng  Khai báo trong sơ đồ thơng báo: ON_MESSAGE(WM_MYMSG1, OnProcessMsg1)  Hàm xử lý LRESULT CMyProgram::OnProcessMsg1( WPARAM wParam, LPARAM lParam) { //To do u } GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 4 Truy xuất, quản lý hệ thống File và thư mục GV: Nguyễn Thị Mai Trang 2 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mục tiêu  Giới thiệu cách tổ chức hệ thống file và thư mục trong Windows.  Tạo và lưu các đối tượng do người sử dụng định nghĩa  Qua chương này, sinh viên cĩ thể nắm vững kỹ năng thao tác với file và thư mục. GV: Nguyễn Thị Mai Trang 3 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Nơi dung  File và thư mục  Serialization và lớp CArchive GV: Nguyễn Thị Mai Trang 4 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 1: File và thư mục  Các hàm thuộc lớp CFile  Các thao tác với file và thư mục  Xử lý ngoại lệ GV: Nguyễn Thị Mai Trang 5 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm thuộc lớp CFile  GetPathFile: Cho kết quả là chuỗi đường dẫn và tên đầy đủ của một file  GetFileName: Cho kết quả là chuỗi tên đầy đủ của một file.  GetFileTitle: Cho kết quả là chuỗi tên file khơng cĩ phần mở rộng. GV: Nguyễn Thị Mai Trang 6 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm thuộc lớp CFile  Ví dụ GV: Nguyễn Thị Mai Trang 7 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các thao tác với file và thư mục Mở file  Đĩng file  Đọc và ghi file  Di chuyển trong file  Đổi tên file  Xĩa file  Xử lý ngoại lệ  Liệt kê file và thư mục GV: Nguyễn Thị Mai Trang 8 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mở file  Cĩ 2 cách mở file – Cách 1: Sử dụng hàm CFile::Open • lpszFileName: tên file • nOpenFlags: chế độ mở file • pError: đối tượng lớp CFileException chứa thơng tin ngoại lệ GV: Nguyễn Thị Mai Trang 9 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mở file – Sử dụng hàm CFile::Open (tt) GV: Nguyễn Thị Mai Trang 10 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mở file  Cách 2: Sử dụng phương thức thiết lập của lớp CFile GV: Nguyễn Thị Mai Trang 11 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mở và tạo file mới – Với cách này, file mới sẽ ghi đè lên file đã cĩ – Nếu file chưa tồn tại -> tạo mới – Nếu file đã tồn tại, mở nhưng khơng ghi đè. GV: Nguyễn Thị Mai Trang 12 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các mức truy cập file  Cĩ thể cho phép hoặc hạn chế quyền truy cập file  Cĩ thể chỉ định cho phép đọc / ghi file GV: Nguyễn Thị Mai Trang 13 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Đĩng file  CFile::Close() (ví dụ: fileName.Close();)  CFile:: ~ CFile GV: Nguyễn Thị Mai Trang 14 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Đọc và ghi file  Ví dụ 1: GV: Nguyễn Thị Mai Trang 15 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Đọc và ghi file  Ví dụ 2: GV: Nguyễn Thị Mai Trang 16 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm di chuyển trong file  Seek(LONG lOff, UINT nFrom) – lOff: số bytes – nFrom: – CFile::begin : vị trí từ đầu file – CFile::current: vị trí con trỏ hiện tại của file – CFile::end : vị trí từ cuối file.  SeekTobegin(): di chuyển nhanh về đầu file.  SeekToEnd(): di chuyển nhanh về cuối file. GV: Nguyễn Thị Mai Trang 17 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Đổi tên file, xĩa file  Đổi tên file – CFile::Rename ( pOldName,pNewName); • pOldName: tên file cũ • pNewName: tên mới của file  Xĩa file – CFile::Remove (pFileName); GV: Nguyễn Thị Mai Trang 18 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Xử lý ngoại lệ với lớp CFileException  Khi thao tác truy cập file, sẽ cĩ trường hợp phát sinh lỗi  Cĩ thể dùng biến thành phần m_cause của lớp CFileException để dị lỗi  Các mã CFileException m_cause: Khơng cĩ lỗi Khơng cĩ mã lỗi xác định Nhiều file mở đồng thời Khơng tìm thấy file Tên đường dẫn khơng hợp lệ CFileException::none CFileException::generic CFileException::tooManyOpenFile CFileException::fileNotFound CFileException::badPath GV: Nguyễn Thị Mai Trang 19 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Xử lý ngoại lệ với lớp CFileException Cố sử dụng thẻ quản file khơng hợp lệ Thao tác tìm kiếm khơng thành cơng Đã tới cuối file Khơng đủ khơng gian đĩa Xuất hiện lỗi phần cứng Khơng được phép truy cập file Thư mục quá nhiều file khơng thể thêm nữa Khơng thể xố thư mục hiện hành Khơng thể khố vùng đã khố của file Vùng dùng chung bị khố hoặc khơng thể chia sẻ CFileException::invalideFile CFileException::badSeek CFileException::endOfFile CFileException::diskFull CFileException::hardIO CFileException::accessDenied CFileException::directoryFull CFileException::removeCurrent Dir CFileException::lockViolation CFileException::sharingViolation GV: Nguyễn Thị Mai Trang 20 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Liệt kê file và thư mục  Để cĩ thể đếm và tính tốn số files, ta dùng hai hàm ::FindFirstFile và ::FindNextFile GV: Nguyễn Thị Mai Trang 21 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tìm file  Sử dụng lớp CFileFind GV: Nguyễn Thị Mai Trang 22 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tìm file  Sử dụng lớp CFileFind GV: Nguyễn Thị Mai Trang 23 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 2: Serialization và lớp CArchive  Serialization  Lớp CArchive GV: Nguyễn Thị Mai Trang 24 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization (chuỗi hĩa dữ liệu)  Chuỗi hố dữ liệu trong Visual C++ gồm hai phần – Dữ liệu ứng dụng được lưu trữ trên ổ đĩa hệ thống dưới dạng file, gọi là chuỗi hố dữ liệu – Khi trạng thái ứng dụng được phục hồi từ file gọi là phi chuỗi hố dữ liệu Sự kết hợp của hai phần này tạo nên chuỗi hĩa các đối tượng ứng dụng trong Visual C++. GV: Nguyễn Thị Mai Trang 25 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization (tt)  Lớp CArchive và CFile – Sự chuỗi hĩa dữ liệu được thực hiện thơng qua lớp CArchive – Lớp CArchive được thiết kế để hoạt động như một luồng vào ra cho đối tượng CFile: cho phép dữ liệu cĩ thể tới và đi từ file. – Lớp CArchive luơn được kết hợp với lớp CFile trong việc lưu trữ hoặc lấy dữ liệu từ file. GV: Nguyễn Thị Mai Trang 26 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization(tt) GV: Nguyễn Thị Mai Trang 27 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization(tt)  Kết hợp lớp CArchive và CFile để lưu dữ liệu vào file và lấy dữ liệu ra từ file: dùng tốn tử >  Ví dụ: GV: Nguyễn Thị Mai Trang 28 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization  Cĩ thể sử dụng lớp CArchive đối với các kiểu dữ liệu khác như: BYTE, WORD, LONG, DWORD, float, double, int, unsigned int, short, char,x  Cả với các dữ liệu đặc biệt như: CString, CTime, CTimeSpan, COleVariant, COleCurrency, COleDateTime, COleDateTimeSpan, CSize, CPoint, CRect.  Cĩ thể tự định nghĩa hàm Serialize, với lớp CArchive để lưu trữ một kiểu dữ liệu riêng. GV: Nguyễn Thị Mai Trang 29 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Serialization  Ví dụ: cĩ một mảng các đối tượng thuộc lớp CLine (biến pLine), và biến nCount là số phần tử trong mảng. GV: Nguyễn Thị Mai Trang 30 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các bước chuỗi hĩa dữ liệu  Lớp phải kế thừa từ lớp CObject  Bổ sung marcro DECLARE_SERIAL trong phần khai báo lớp. Marcro này cĩ một đối số là tên lớp. Nĩ tự động thêm vào lớp một số khai báo tốn tử và hàm chuẩn cần cho việc chuỗi hố đối tượng.  Định nghĩa hàm Serialize GV: Nguyễn Thị Mai Trang 31 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các bước chuỗi hĩa dữ liệu (tt)  Bổ sung marcro IMPLEMENT_SERIAL vào phần thực thi của lớp. Marcro này đặt bên ngồi các hàm lớp khác bởi nĩ bổ sung mã cho các hàm lớp đã được khai báo với marcro DECLARE_SERIAL. Marcro này cĩ ba đối số là tên lớp, tên lớp cơ sở và số hiệu phiên bản cĩ thể được sử dụng để xác định file cĩ phải là phiên bản đúng để đọc trong ứng dụng hay khơng. GV: Nguyễn Thị Mai Trang 32 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các bước chuỗi hĩa dữ liệu (tt)  Ví dụ GV: Nguyễn Thị Mai Trang 33 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các bước chuỗi hĩa dữ liệu (tt)  GV: Nguyễn Thị Mai Trang 1 Lập trình Windows - Chương 5 Giao diện người dùng kiểu đồ họa GV: Nguyễn Thị Mai Trang 2 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Mục tiêu  Giới thiệu các loại giao diện của ứng dụng trên windows  Cách thiết kế giao diện, sử dụng một cách cĩ hiệu quả các đối tượng thiết kế trực quan như menu, control, dialog@ để xây dựng chương trình.  Qua chương này, sinh viên cĩ thể viết chương trình đáp ứng được các yêu cầu phức tạp và hiệu quả. GV: Nguyễn Thị Mai Trang 3 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Nội dung  Bài 1: Menu  Bài 2: Giao diện Dialog và các Controls  Bài 3: Kiến trúc Document/View  Bài 4: Kết hợp các hộp thoại (Dialog, Property Sheets) GV: Nguyễn Thị Mai Trang 4 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 1: Menu  Thiết kế và sử dụng menu  Các chức năng nâng cao GV: Nguyễn Thị Mai Trang 5 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Thiết kế và sử dụng menu  Tạo menu trong ứng dụng  Xử lý các sự kiện menu GV: Nguyễn Thị Mai Trang 6 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo menu trong ứng dụng  Tạo menu từ nguồn tài nguyên của ứng dụng và dùng phương thức LoadMenu  Dùng các hàm CreateMenu, LoadMenu, và các hàm thuộc lớp CMenu GV: Nguyễn Thị Mai Trang 7 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Cách tạo một Menu từ MFC AppWizard GV: Nguyễn Thị Mai Trang 8 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Cách tạo một Menu từ MFC AppWizard Mã lệnh phát sinh trong resouce file GV: Nguyễn Thị Mai Trang 9 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Cách tạo một Menu từ MFC AppWizard GV: Nguyễn Thị Mai Trang 10 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo và hiển thị menu  Sử dụng hàm CFrameWnd::Create  Sử dụng CFrameWnd::LoadFrame GV: Nguyễn Thị Mai Trang 11 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo và hiển thị menu  Sử dụng CMenu:LoadMenu GV: Nguyễn Thị Mai Trang 12 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Xử lý các sự kiện của Menu  Khi chọn một menu item, phát sinh sự kiện WM_COMMAND.  Sự kiện này được xử lý trong hàm ON_COMMAND.  Ví dụ: – ON_COMMAND (ID_FILE_NEW, OnFileNew) – ON_COMMAND (ID_FILE_OPEN, OnFileOpen) – ON_COMMAND (ID_FILE_SAVE, OnFileSave) – ON_COMMAND (ID_FILE_SAVE_AS, OnFileSaveAs) – ON_COMMAND (ID_FILE_EXIT, OnFileExit) GV: Nguyễn Thị Mai Trang 13 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Xử lý các sự kiện menu theo nhĩm Sử dụng cho các menu cĩ chức năng thực hiện một lệnh như nhau Ví dụ GV: Nguyễn Thị Mai Trang 14 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Cập nhật trạng thái menu item  Sử dụng hàm CheckMenuItem, CheckMenuRadioItem  – Ví dụ • CMenu* pMenu = GetMenu (); • pMenu->CheckMenuItem (nID, MF_CHECKED); • pMenu->CheckMenuItem(nID, MF_UNCHECKED); – GV: Nguyễn Thị Mai Trang 15 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các chức năng nâng cao  Tạo và thay đổi menu trong ứng dụng  Tạo menu riêng cho người dùng Menu hiển thị bằng hình ảnh Menu ngữ cảnh (Context menu hay Popup menu) Sử dụng các hàm thuộc lớp CMenu GV: Nguyễn Thị Mai Trang 16 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm thuộc lớp CMenu  CMenu::CreateMenu Tạo menu  CMenu::CreatePopupMenu Tạo menu popup  CMenu::AppendMenu Nối thêm một mục menu  CMenu::GetMenu Lấy con trỏ menu chính  CMenu::GetSubMenu Lấy con trỏ menu con  CMenu::InsertMenu Chèn thêm 1 menu  CMenu::ModifyMenu Sửa đổi thuộc tính menu  CMenu::RemoveMenu Gỡ bỏ một mục menu  CMenu::GetMenuItemCount Trả về tổng số mục menu  CMenu::TrackPopupMenu Hiển thị menu popup GV: Nguyễn Thị Mai Trang 17 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows AppendMenu  Chức năng: nối thêm một mục vào cuối menu – nFlags: Chỉ định trạng thái của menu mới thêm vào, gồm các giá trị như: MF_ENABLED, MF_CHECKED, MF_UNCHECKED, MF_DISABLED, MF_GRAYED – nIDNewItem: id của menu mới thêm vào – lpszNewItem: Chuỗi hiển thị trên menu mới thêm vào – pBmp: con trỏ đến đối tượng CBitmap (hiển thị bipmap trên menu) GV: Nguyễn Thị Mai Trang 18 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows AppendMenu (tt) Ví dụ GV: Nguyễn Thị Mai Trang 19 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows InsertMenu Chức năng: chèn thêm một mục menu vào một vị trí xác định GV: Nguyễn Thị Mai Trang 20 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows InsertMenu (tt) – nPosition: • ID menu đứng sau menu sẽ thêm vào, tương ứng với nFlags là MF_BYCOMMAND • Vị trí của menu sẽ thêm vào.tương ứng với nFlags là MF_BYPOSITION – nFlags: MF_BYCOMMAND, MF_BYPOSITION GV: Nguyễn Thị Mai Trang 21 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows InsertMenu (tt) Ví dụ GV: Nguyễn Thị Mai Trang 22 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows ModifyMenu  Chức năng: sửa đổi thuộc tính menu GV: Nguyễn Thị Mai Trang 23 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows ModifyMenu (tt)  Ví dụ GV: Nguyễn Thị Mai Trang 24 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows TrackPopupMenu Chức năng: hiển thị menu popup Ví dụ GV: Nguyễn Thị Mai Trang 25 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows RemoveMenu Chức năng: gỡ bỏ một mục menu Ví dụ GV: Nguyễn Thị Mai Trang 26 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 2: Giao diện Dialog và các Controls Giới thiệu giao diện dạng dialog The Classic Controls Advanced Controls Tham khảo một số controls khác GV: Nguyễn Thị Mai Trang 27 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Giao diện dạng dialog Tạo ứng dụng dạng dialog Thiết kế một Dialog trong Visual C++ Xếp thứ tự các controls trên Dialog Sắp xếp các controls trên Dialog GV: Nguyễn Thị Mai Trang 28 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng dạng dialog GV: Nguyễn Thị Mai Trang 29 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Thiết kế một Dialog trong Visual C++ Kéo các control trên thanh Toolbox lên dialog GV: Nguyễn Thị Mai Trang 30 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Thiết kế một Dialog trong Visual C++ Click chuột phải trên control, chọn properties để thay đổi các thuộc tính GV: Nguyễn Thị Mai Trang 31 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Xếp thứ tự các controls trên Dialog Từ menu Layout, chọn TabOrder (hoặc Ctrl+D) GV: Nguyễn Thị Mai Trang 32 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sắp xếp các controls trên Dialog GV: Nguyễn Thị Mai Trang 33 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Sắp xếp các controls trên Dialog GV: Nguyễn Thị Mai Trang 34 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The Classic Controls Button control ListBox control ComboBox control Edit control Static control Scrolbar control GV: Nguyễn Thị Mai Trang 35 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The Classic Controls GV: Nguyễn Thị Mai Trang 36 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Có 4 loại button Push Button Check boxes Radio buttons Group boxes The CButton Class GV: Nguyễn Thị Mai Trang 37 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Button Styles Style Description  BS_PUSHBUTTON Creates a standard push button control  BS_DEFPUSHBUTTON Creates a default push button; used in dialog boxes to identify the push button that's clicked if Enter is pressed  BS_CHECKBOX Creates a check box control  BS_AUTOCHECKBOX Creates a check box control that checks and unchecks itself when clicked  BS_3STATE Creates a three-state check box control  BS_AUTO3STATE Creates a three - state check box control that cycles through three states - checked, unchecked, and indeterminate - when clicked  BS_RADIOBUTTON Creates a radio button control  BS_AUTORADIOBUTTON Creates a radio button control that, when clicked, checks itself and unchecks other radio buttons in the group  BS_GROUPBOX Creates a group box control GV: Nguyễn Thị Mai Trang 38 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Canh lề văn bản trên button Style Description  BS_LEFTTEXT Moves the text accompanying a radio button or check box control from the button's right (the default) to its left  BS_RIGHTBUTTON Same as BS_LEFTTEXT  BS_LEFT Left justifies the button text in the control rectangle  BS_CENTER Centers the button text in the control rectangle  BS_RIGHT Right justifies the button text in the control rectangle  BS_TOP Positions the button text at the top of the control rectangle  BS_VCENTER Positions the button text in the center of the control rectangle vertically  BS_BOTTOM Positions the button text at the bottom of the control rectangle  BS_MULTILINE Allows text too long to fit on one line to be broken into two or more lines GV: Nguyễn Thị Mai Trang 39 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Canh lề văn bản trên button GV: Nguyễn Thị Mai Trang 40 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Push Button  Là một control button được tạo với style là BS_PUSHBUTTON  Khi được chọn, push button sẽ gởi đến cửa sổ chính thơng báo BN_CLICKED trong WM_COMMAND message.  Hàm xử lý GV: Nguyễn Thị Mai Trang 41 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Check Boxes  Check Boxes là một control button được tạo với style là BS_CHECKBOX,BS_AUTOCHECKBOX, BS_3STATE hoặc BS_AUTO3STATE.  BS_CHECKBOX và BS_AUTOCHECKBOX cĩ thể cĩ 2 trạng thái: chọn và khơng chọn.  Một check boxes được chọn hoặc khơng chọn với hàm CButton:: SetCheck. m_wndCheckBox.SetCheck (BST_CHECKED); m_wndCheckBox.SetCheck(BST_UNCHECKED); GV: Nguyễn Thị Mai Trang 42 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Check Boxes  Để biết được một check boxes đang được chọn hay khơng chọn, dùng hàm CButton ::GetCheck GV: Nguyễn Thị Mai Trang 43 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Radio Buttons  Được tạo với style là BS_RADIOBUTTON hoặc BS_AUTORADIOBUTTON.  Thơng thường, các radio buttons thường nằm trong một nhĩm, chỉ cho phép người dùng chọn một trong các radio button. Khi một radio button được chọn (check), các radio buttons khác trong nhĩm sẽ được bỏ chọn (uncheck).  Một radio button được tạo với style BS_AUTORADIOBUTTON sẽ tự động được chọn hoặc bỏ chọn khi click vào. GV: Nguyễn Thị Mai Trang 44 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Radio Buttons Một radio button được tạo với style BS_RADIOBUTTON sẽ khơng tự động được chọn hoặc bỏ chọn mà phải dùng hàm CButton:: SetCheck GV: Nguyễn Thị Mai Trang 45 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Ví dụ về Radio Buttons, Check Boxes GV: Nguyễn Thị Mai Trang 46 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Ví dụ về Radio Buttons, Check Boxes (tt) GV: Nguyễn Thị Mai Trang 47 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Ví dụ về Radio Buttons, Check Boxes (tt) GV: Nguyễn Thị Mai Trang 48 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Group Boxes  Group boxes button là một control được tạo với style là BS_GROUPBOX.  Group boxes chỉ là một đối tượng tĩnh bao quanh các nhĩm controls khác, khơng nhận focus và khơng gởi bất kỳ thơng báo nào cho cửa sổ chính GV: Nguyễn Thị Mai Trang 49 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CListBox Class  Tạo một Listbox  Ví dụ GV: Nguyễn Thị Mai Trang 50 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows ListBox styles  LBS_STANDARD : Listbox cĩ khung, thanh cuộn đứng, cho phép chọn item và tự động xếp thứ tự.  LBS_SORT: Tự động xếp thứ tự.  LBS_NOSEL: Khơng cho phép chọn item.  LBS_NOTIFY: Cĩ thơng báo với cửa sổ chính khi chọn hoặc double click lên một item.  LBS_DISABLENOSCROLL: Vơ hiệu hố thanh cuộn khi nĩ khơng cần thiết.  LBS_NOREDRAW: Tạo listbox khơng cĩ chức năng tự vẽ lại khi thêm hoặc loại bỏ một item.  LBS_MULTIPLESEL: Cho phép chọn nhiều items. GV: Nguyễn Thị Mai Trang 51 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  AddString: Thêm một chuỗi vào cuối listbox, tự động xếp thứ tự đối với listbox tạo với LBS_SORT. – m_wndListBox.AddString (string);  InsertString: Thêm một chuỗi vào listbox tại vị trí chỉ định. – m_wndListBox.InsertString (3, string); – Đối với hai hàm AddString và InsertString, nếu thành cơng, giá trị trả về là vị trí của item vừa thêm vào. – Lỗi: LB_ERRSPACE (listbox đầy) hoặc LB_ERR (các lỗi khác). GV: Nguyễn Thị Mai Trang 52 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  GetCount: Tổng số items trong listbox.  DeleteString: Loại bỏ một chuỗi từ listbox.  ReseteContent: Loại bỏ tất cả items.  GetText: Lấy ra chuỗi của item tại vị trí chỉ định  GetCurSel: Lấy vị trí của item đang được chọn.  SetFont: định dạng font cho các chuỗi văn bản trong listbox GV: Nguyễn Thị Mai Trang 53 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  SetItemDataPtr: đưa vào listbox một đối tượng là con trỏ 32 bits. – for (int i = 0 ; i GetCount() ; i ++ ) m_pListBox-> SetItemDataPtr ( i , NULL);  SetItemData: Đưa vào listbox một giá trị DWORD. – for (int i = 0 ; i GetCount() ; i ++ ) m_pListBox-> SetItemData ( i , i);  GetItemDataPtr, GetItemData: Nhận các giá trị trên từ listbox. GV: Nguyễn Thị Mai Trang 54 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  SetCurSel: Chọn item tại vị trí chỉ định.  SelectString: Tìm một chuỗi và chiếu sáng chuỗi đầu tiên tìm thấy – m_wndListBox.SelectString (-1, _T(“Times”));  FindString: Tìm một chuỗi, nếu thành cơng trả về vị trí item chứa chuỗi tìm thấy, khơng tìm thấy trả về LB_ERR.  FindStringExact: giống FindString, nhưng tìm chính xác.  SetSel: chọn một item trong listbox được tạo với style LBS_MULTILESEL. GV: Nguyễn Thị Mai Trang 55 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  SelItemRange: Chọn một nhĩm items liên tiếp trong listbox được tạo với style LBS_MULTILESEL. m_wndListBox. SetSel (0); m_wndListBox. SetItemRange ( TRUE , 5, 9 ); m_wndListBox. SetSel (6, FALSE ); Kết quả là các item 0, 5, 7, 8, 9 được chọn.  GetSelCount: trả về giá trị là số items được chọn.  GetSelItems: trả về chỉ số của tất cả items được chọn.  GetSelItems: trả về chỉ số của tất cả items được chọn. GV: Nguyễn Thị Mai Trang 56 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CListBox  Ví dụ GV: Nguyễn Thị Mai Trang 57 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Listbox Notifications GV: Nguyễn Thị Mai Trang 58 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Listbox Notifications Ví dụ GV: Nguyễn Thị Mai Trang 59 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CStatic Class  Static control gồm: texts (chuỗi), rectangles (khung) và images (hình ảnh).  Tạo một static control: m_wndStatic.Create (_T ("Name"), WS_CHILD ¦ WS_VISIBLE ¦ SS_LEFT, rect, this, IDC_STATIC); – SS_LEFT : Canh trái chuỗi – SS_CENTER: Canh giữa – SS_RIGHT: Canh phải – SS_CENTERIMAGE: Canh giữa theo phương đứng GV: Nguyễn Thị Mai Trang 60 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CStatic Class  Cĩ thể chỉ định kiểu của khung chữ nhật quanh đối tượng static. GV: Nguyễn Thị Mai Trang 61 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Ví dụ: m_wndStatic.Create (_T (""), WS_CHILD ¦ WS_VISIBLE ¦ SS_ETCHEDFRAME, rect, this,IDC_STATIC); The CStatic Class GV: Nguyễn Thị Mai Trang 62 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CStatic Class  Cĩ thể tạo một static control hiển thị hình ảnh như bitmap, icon @ – SS_BITMAP: hiển thị hình ảnh là bitmap – SS_ICON: hiển thị icon  Sau khi tạo một static control thuộc dạng trên, để hiển thị hình ảnh, dùng các hàm SetBitmap, SetIcon. GV: Nguyễn Thị Mai Trang 63 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Static control Notification Mặc định, static control khơng gởi thơng báo nào cho cửa sổ chính. Chỉ cĩ static control được tạo với SS_NOTIFY mới gởi các thơng báo dưới đây: Notification Sent When Message-Map Macro STN_CLICKED The control is clicked. ON_STN_CLICKED STN_DBLCLK The control is double-clicked. ON_STN_DBLCLK STN_DISABLE The control is disabled. ON_STN_DISABLE STN_ENABLE The control is enabled. ON_STN_ENABLE GV: Nguyễn Thị Mai Trang 64 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Static control Notification  Ví dụ GV: Nguyễn Thị Mai Trang 65 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CEdit Class  Edit control gồm hai dạng: single-line và multi- line.  Tạo một edit control: m_wndEdit.Create (WS_CHILD ¦ WS_VISIBLE ¦ WS_BORDER ¦ ES_AUTOHSCROLL, rect, this, IDC_EDIT); m_wndEdit.Create (WS_CHILD ¦ WS_VISIBLE ¦ WS_BORDER ¦WS_HSCROLL ¦ WS_VSCROLL ¦ ES_MULTILINE, rect, this, IDC_EDIT); GV: Nguyễn Thị Mai Trang 66 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Edit control Styles Style Description  ES_LEFT Canh lề trái văn bản trong editbox.  ES_CENTER Canh giữa.  ES_RIGHT Canh phải.  ES_AUTOHSCROLL Tự động cuộn ngang.  ES_AUTOVSCROLL Tự động cuộn xuống.  ES_MULTILINE Tạo một multiline edit control.  ES_LOWERCASE Chuyển chuỗi trong editbox sang ký tự thường.  ES_UPPERCASE Chuyển chuỗi trong editbox sang ký tự hoa.  ES_PASSWORD Hiển thị dấu hoa thị thay cho ký tự.  ES_READONLY Tạo một editbox khơng cho phép chỉnh sửa.  ES_NOHIDESEL Khơng bỏ chọn khi editbox mất focus.  ES_WANTRETURN Cĩ thể nhấn phím Enter để xuống dịng. GV: Nguyễn Thị Mai Trang 67 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp Cedit  SetWindowText: đưa một chuỗi vào edit control. VD: m_wndEdit.SetWindowText ( _T ("Hello, MFC"));  GetWindowText: Lấy một chuỗi từ edit control. VD: m_wndEdit.GetWindowText (string);  ReplaceSel: Thay thế chuỗi được chọn bằng chuỗi mới. VD: m_wndEdit.ReplaceSel (“newstring"); GV: Nguyễn Thị Mai Trang 68 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp Cedit  GetLine: Lấy một chuỗi từ edit control trên một hàng.  LineLength: cho kết quả là số bytes trên một hàng.  GetLineCount: số dịng trong edit control multiline.  Clear: Xố phần văn bản được chọn trong edit control.  Cut: Xố phần văn bản được chọn và copy vào clipboard.  Copy: Copy phần văn bản được chọn vào clipboard. GV: Nguyễn Thị Mai Trang 69 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp Cedit  Paste: dán văn bản từ clipboard vào edit control. VD: m_wndEdit.Paste(); Để kiểm tra trong clipboard cĩ lưu trữ phần văn bản nào khơng, dùng hàm ::IsClipboardFormatAvailable VD: BOOL bCanPaste = ::IsClipboardFormatAvailable (CF_TEXT);  Undo: phục hồi lại thao tác trước. GV: Nguyễn Thị Mai Trang 70 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Edit control Notifications Notification Message-Map Macro  EN_UPDATE ON_EN_UPDATE  EN_CHANGE ON_EN_CHANGE  EN_KILLFOCUS ON_EN_KILLFOCUS  EN_SETFOCUS ON_EN_SETFOCUS  EN_HSCROLL ON_EN_HSCROLL  EN_VSCROLL ON_EN_VSCROLL  EN_MAXTEXTA ON_EN_MAXTEXT  EN_ERRSPACE ON_EN_ERRSPACE GV: Nguyễn Thị Mai Trang 71 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The CComboBox Class Tạo một combobox CComboBox m_wndComboBox; m_wndComboBox.Create (WS_CHILD ¦ WS_VISIBLE ¦ WS_BORDER ¦ WS_VSCROLL ¦CBS_DROPDOWNLIST ¦ CBS_SORT, rect, this, IDC_COMBOBOX); GV: Nguyễn Thị Mai Trang 72 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Combobox Style – CBS_AUTOHSCROLL – CBS_DISABLENOSCROLL – CBS_DROPDOWN – CBS_DROPDOWNLIST – CBS_HASSTRINGS – CBS_LOWERCASE – CBS_OWNERDRAWFIXED – CBS_OWNERDRAWVARIABLE – CBS_SIMPLE – CBS_SORT – CBS_UPPERCASE GV: Nguyễn Thị Mai Trang 73 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CComboBox  AddString: thêm một chuỗi vào combobox.  InsertString: thêm một chuỗi vào combobox tại vị trí chỉ định.  GetText: Lấy ra chuỗi của item tại vị trí chỉ định.  GetCurSel: Lấy vị trí của item được chọn.  SetCurSel: Chọn item tại vị trí chỉ định.  ShowDropDown: Bật hoặc tắt chế độ dropdown của combobox.  GetDroppedState: Kiểm tra trạng thái combobox (cĩ hiển thị danh sách xổ xuống hay khơng). GV: Nguyễn Thị Mai Trang 74 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows ComboBox control Notifications  Những sự kiện tác động lên combobox sẽ gởi thơng báo đến cửa sổ chính qua WM_COMMAND GV: Nguyễn Thị Mai Trang 75 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Advanced Controls  Numeric edit control  Owner-Draw List Boxes  Graphical Push Buttons  Customizing a Control's Colors GV: Nguyễn Thị Mai Trang 76 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Numeric edit control  Là edit control chỉ cho phép nhập giá trị là số, thường được dùng để nhập dữ liệu là số như: số điện thoại, serials, địa chỉ IP@  Tạo một Numeric edit control: GV: Nguyễn Thị Mai Trang 77 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Numeric edit control@  Tạo một Numeric edit control (tt) GV: Nguyễn Thị Mai Trang 78 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes Mặc định, item trong một listbox là một chuỗi văn bản. Nếu muốn listbox hiển thị được hình ảnh, tạo một owner-draw listbox theo các bước sau: – Tạo một lớp kế thừa từ lớp CListBox – Trong đĩ định nghĩa các hàm ảo: • CListBox::MeasureItem : thiết lập kích thước mỗi phần tử (item) • CListBox::DrawItem: vẽ lại các phần tử (item) • PreCreateWindow: thay đổi ListBox style phù hợp GV: Nguyễn Thị Mai Trang 79 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes  Lưu ý là listbox phải được tạo với style: LBS_OWNERDRAWFIXED Hoặc LBS_OWNERDRAWVARIABLE  Khi listbox được vẽ hoặc vẽ lại, cửa sổ chính sẽ nhận được WM_DRAWITEM và WM_MEASUREITEM message. MFC sẽ gọi hai hàm ảo DrawItem và MeasureItem GV: Nguyễn Thị Mai Trang 80 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes  Ví dụ GV: Nguyễn Thị Mai Trang 81 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes GV: Nguyễn Thị Mai Trang 82 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes GV: Nguyễn Thị Mai Trang 83 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Owner-Draw List Boxes GV: Nguyễn Thị Mai Trang 84 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors  MFC hỗ trợ hai kỹ thuật để thay đổi một control color, dựa vào cơ chế là một control khi được vẽ lại sẽ gởi đến cửa sổ chính một message bao hàm handle của thiết bị ngữ cảnh dùng để vẽ.  Cửa sổ chính của ứng dụng cĩ thể gọi hai hàm CDC::SetTextColor và CDC::SetBkColor.  Message mà một control gởi đến cửa sổ chính của ứng dụng thay đổi tùy theo mỗi loại control. Ví dụ: – Một listbox gởi WM_CTLCOLORLISTBOX message. – Một static control gởi WM_CTLCOLORSTATIC message. GV: Nguyễn Thị Mai Trang 85 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors  Hàm xử lý afx_msg HBRUSH OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) – pDC: thiết bị ngữ cảnh của control – pWnd: Con trỏ lớp CWnd nhận dạng control – nCtlColor: loại message được gởi đến GV: Nguyễn Thị Mai Trang 86 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors nCtlColor Control Type or Window Type  CTLCOLOR_BTN Push button.  CTLCOLOR_DLG Dialog box.  CTLCOLOR_EDIT Edit control and the edit control part of a combo box.  CTLCOLOR_LISTBOX List box and the list box part of a combo box.  CTLCOLOR_MSGBOX Message box.  CTLCOLOR_SCROLLBAR Scroll bar.  CTLCOLOR_STATIC Static control, check box, radio button, group box, read-only or disabled edit control, and the edit control in a disabled combo box. GV: Nguyễn Thị Mai Trang 87 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors GV: Nguyễn Thị Mai Trang 88 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors  Đối với một lớp control tự tạo kế thừa từ lớp cơ sở, dùng marcro ON_WM_CTLCOLOR_REFLECT GV: Nguyễn Thị Mai Trang 89 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Customizing a Control's Colors GV: Nguyễn Thị Mai Trang 90 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tham khảo  CCheckListBox  CListControl GV: Nguyễn Thị Mai Trang 91 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tham khảo  CBitmapButton  CComboBoxEx GV: Nguyễn Thị Mai Trang 92 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tham khảo  CTreeControl  CRichEdit GV: Nguyễn Thị Mai Trang 93 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 3: Kiến trúc Documents / Views  Kiến trúc Document/View  Giao diện đơn tài liệu (Single Document Interface - SDI)  Giao diện đa tài liệu (Multiple Document Interface - MDI) GV: Nguyễn Thị Mai Trang 94 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc Document/View GV: Nguyễn Thị Mai Trang 95 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Giao diện đơn tài liệu (SDI)  Giới thiệu  Kiến trúc ứng dụng SDI  Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 96 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Giới thiệu ứng dụng SDI Ứng dụng SDI là một ứng dụng mà tại một thời điểm chỉ cĩ thể làm việc với duy nhất một tài liệu. Ứng dụng SDI cho phép lưu trữ dữ liệu vào một tập tin và cho phép mở tài liệu từ tập tin Một số ví dụ điển hình cho các ứng dụng SDI là Notepad, Wordpad và Paint. GV: Nguyễn Thị Mai Trang 97 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng SDI Một ứng dụng SDI bao gồm bốn lớp căn bản:  Lớp dẫn xuất CWinApp: tạo tất cả các thành phần khác trong ứng dụng. Đây là lớp nhận các thơng báo sự kiện và chuyển tới các lớp CView và CFrameView  Lớp dẫn xuất CFrameView: khung cửa sổ chứa menu, thanh cơng cụ, thanh cuộn@  Lớp dẫn xuất CDocument: là nơi cĩ thể xây dựng các cấu trúc dữ liệu và thao tác dữ liệu tạo nên tài liệu của ứng dụng, lưu trữ và lấy dữ liệu từ các files. Lớp này nhận dữ liệu từ lớp CView và truyền thơng tin hiển thị đến lớp CView.  Lớp dẫn xuất CView: hiển thị bề mặt giao diện của ứng dụng, nhận thơng tin về dữ liệu từ lớp CDocument và truyền thơng tin đến lớp CDocument GV: Nguyễn Thị Mai Trang 98 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng SDI GV: Nguyễn Thị Mai Trang 99 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Lớp CWinApp  Hàm Thành phần InitInstance là nơi chứa các đoạn mã tạo các lớp MainFrame, CView, Document CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate ( IDR_MAINFRAME, RUNTIME_CLASS (CMyDoc), RUNTIME_CLASS (CMainFrame), RUNTIME_CLASS (CMyView) ); AddDocTemplate (pDocTemplate); CCommandLineInfo cmdInfo; ParseCommandLine (cmdInfo); if (!ProcessShellCommand (cmdInfo)) return FALSE; m_pMainWnd->ShowWindow (SW_SHOW); m_pMainWnd->UpdateWindow (); Tạo các thành phần của ứng dụng SDI từ lớp CSingleDocTemplate Gọi hàm thành phần CWinApp::OnFileNew Tạo đối tượng CCommandLineInfo nhận thông tin phản hồi GV: Nguyễn Thị Mai Trang 100 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CDocument  GetFirstViewPosition: Trả về giá trị POSITION để duyệt danh sách các Views  GetNextView : Trả về con trỏ kế tiếp thuộc lớp CView trong danh sách các Views GV: Nguyễn Thị Mai Trang 101 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CDocument  GetPathName: Trả về chuỗi đường dẫn đầy đủ của file tài liệu.  GetTitle: Trả về chuỗi tiêu đề của tài liệu. Ví dụ: "MyFile"  IsModified: trả về giá trị khác 0 nếu tài liệu đã được sửa đổi.  SetModifiedFlag: Thơng báo tài liệu đã được thay đổi.  UpdateAllViews: Cập nhật / vẽ lại tất cả các Views. GV: Nguyễn Thị Mai Trang 102 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CDocument  OnUpdate : Cập nhật / vẽ lại một Views.  OnNewDocument Tạo một tài liệu mới.  OnOpenDocument Mở một file tài liệu từ đĩa  DeleteContents Ví dụ: Xố nội dung tài liệu. void CMyDoc::OnEditClearAll() { DeleteContents(); UpdateAllViews(NULL); } GV: Nguyễn Thị Mai Trang 103 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CDocument  Serialize Ví dụ: Lưu dữ liệu và lấy dữ liệu từ file void CMyDoc::Serialize (CArchive& ar) { if (ar.IsStoring ()) { ar << m_strName << m_strPhone; } else { // Loading, not storing. ar >> m_strName >> m_strPhone; } } GV: Nguyễn Thị Mai Trang 104 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CView  GetDocument : Trả về lớp tài liệu chứa View thơng qua biến thành phần m_pDocument  OnDraw: Vẽ cửa sổ view void CMyView::OnDraw (CDC* pDC) { CMyDoc* pDoc = GetDocument (); CString string = pDoc->GetString (); CRect rect; GetClientRect (&rect); pDC->DrawText (string, rect, DT_SINGLELINE ¦ DT_CENTER ¦ DT_VCENTER); } GV: Nguyễn Thị Mai Trang 105 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Một số hàm thuộc lớp CView  OnInitialUpdate: Được gọi trước khi một view được khởi tạo và hiển thị. Thơng thường, việc khởi tạo giá trị các biến thành phần của lớp CView đặt trong hàm này.  OnUpdate: Được gọi khi dữ liệu đã thay đổi để cập nhật lại View. GV: Nguyễn Thị Mai Trang 106 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 107 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 108 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 109 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 110 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng SDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 111 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Giao diện đa tài liệu (MDI)  Giới thiệu  Kiến trúc ứng dụng MDI  Tạo ứng dụng MDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 112 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Giới thiệu ứng dụng MDI Ứng dụng MDI là một ứng dụng mà tại một thời điểm cĩ thể làm việc với nhiều tài liệu với nhiều kiểu ứng dụng. Một số ví dụ điển hình cho các ứng dụng MDI là Word, Excel. GV: Nguyễn Thị Mai Trang 113 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng MDI  Các lớp căn bản: – Lớp dẫn xuất CWinApp – Lớp dẫn xuất CMDIFrameWnd: Lớp CMainFrame được suy dẫn từ lớp này là khung chính của ứng dụng, chứa menu, thanh cơng cụ@ – Lớp dẫn xuất CMDIChildWnd: Lớp CChildFrame được suy dẫn từ lớp này là khung chứa lớp CView. Đây là lớp truyền thơng điệp và sự kiện tới các lớp hiển thị để xử lý hoặc hiển thị. – Lớp dẫn xuất CDocument – Lớp dẫn xuất CView GV: Nguyễn Thị Mai Trang 114 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng MDI  Các lớp căn bản của ứng dụng MDI được tạo thành từ lớp CWndApp tương tự ứng dụng SDI, nhưng sử dụng lớp CMultiDocTemplate thay cho lớp CSingleDocTemplate CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MDISQUTYPE, RUNTIME_CLASS(CSquaresDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CSquaresView)); AddDocTemplate(pDocTemplate); GV: Nguyễn Thị Mai Trang 115 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng MDI  Các thao tác trên mỗi View đối với ứng dụng MDI nhìn chung tương tự như ứng dụng SDI. Tuy nhiên ứng dụng MDI cịn hỗ trợ các chức năng như sắp xếp các Views, thao tác trên từng View@ GV: Nguyễn Thị Mai Trang 116 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Kiến trúc ứng dụng MDI GV: Nguyễn Thị Mai Trang 117 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng MDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 118 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo ứng dụng MDI bằng MFC AppWizard GV: Nguyễn Thị Mai Trang 119 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Bài 4: Kết hợp các hộp thoại (Dialog, Property Sheets) vào một chương trình Modal Dialog Boxes and the CDialog Class Modeless Dialog Boxes  Property Sheets  The Common Dialogs GV: Nguyễn Thị Mai Trang 120 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modal Dialog Boxes and the CDialog Class  Các bước tạo một Modal Dialog Box – Thiết kế Dialog và các controls trên dialog – Tạo một đối tượng của lớp CDialog – Gọi hàm CDialog::DoModal() để hiển thị dialog GV: Nguyễn Thị Mai Trang 121 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modal Dialog Boxes and the CDialog Class  Tạo một Dialog và lớp mới từ Class Wizard GV: Nguyễn Thị Mai Trang 122 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modal Dialog Boxes and the CDialog Class  Ví dụ CMyDialog dlg; dlg.DoModal (); hoặc CMyDialog dlg; if (dlg.DoModal () == IDOK) { // The user clicked OK; do something! } GV: Nguyễn Thị Mai Trang 123 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modal Dialog Boxes and the CDialog Class Mặc định, một modal dialog box sẽ trả về một trong hai giá trị là IDOK hoặc IDCANCEL  Tuy nhiên, ta cĩ thể tạo một lớp dialog trả về một giá trị khác bằng cách gọi EndDialog GV: Nguyễn Thị Mai Trang 124 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modal Dialog Boxes and the CDialog Class  Ví dụ GV: Nguyễn Thị Mai Trang 125 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modeless Dialog Boxes  Điểm khác nhau giữa Modal dialog và Modeless dialog: GV: Nguyễn Thị Mai Trang 126 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Modeless Dialog Boxes  Điểm khác nhau giữa Modal dialog và Modeless dialog: Cho phép người dùng tiếp tục làm việc với phần cịn lại của ứng dụng khi hộp thoại mở Khi hiển thị, hộp thoại modal dừng tồn bộ tiến trình xử lý của ứng dụng cho đến khi người sử dụng đáp lại hộp thoại Hiển thị DestroyWindow Khơng cĩ trị trả về EndDialog Cĩ trị trả về (IDOK, IDCANCEL@) Kết thúc Create() ShowWindows() DoModal()Tạo dialog Modeless dialogModal dialog GV: Nguyễn Thị Mai Trang 127 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Tạo một Modeless Dialog Box  Thiết kế Dialog và các controls trên dialog  Tạo một đối tượng của lớp CDialog  Gọi hàm Create và ShowWindow để tạo và hiển thị Dialog CModelessDlg pDialog; @ pDialog.Create(IDD_MODELESS_DIALOG); pDialog.ShowWindow(SW_SHOW); GV: Nguyễn Thị Mai Trang 128 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Property Sheets  Property Sheet gồm 2 lớp được định nghĩa trong file Afxdlgs.h : – CPropertySheet :Trình bày những thuộc tính của Sheet và thừa kế từ lớp CWnd – CPropertyPage : Trình bày những thuộc tính của trang và thừa kế từ lớp CDialog GV: Nguyễn Thị Mai Trang 129 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Property Sheets  Tạo một modal property sheet : – Đối với mỗi trang trong property sheet, tạo mỗi Dialog kế thừa từ lớp cơ sở CPropertyPage và thiết lập các thuộc tính cho Dialog (tiêu đề trang, các controls@) – Tại lớp chính (kế thừa từ lớp cơ sở CPropertySheet , khai báo biến cho từng sheet tạo ở bước 1. – Tại lớp chính, dùng CPropertySheet::AddPage để thêm các sheet vào theo thứ tự lựa chọn. – Gọi hàm DoModal() để hiển thị . GV: Nguyễn Thị Mai Trang 130 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Property Sheets  Ví dụ GV: Nguyễn Thị Mai Trang 131 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Property Sheets GV: Nguyễn Thị Mai Trang 132 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows The Common Dialogs  The Common Dialog Classes – Class Dialog Type(s) – CFileDialog Open and Save As dialog boxes – CPrintDialog Print and Print Setup dialog boxes – CPageSetupDialog Page Setup dialog boxes – CFindReplaceDialog Find and Replace dialog boxes – CColorDialog Color dialog boxes – CFontDialog Font dialog boxes GV: Nguyễn Thị Mai Trang 133 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CFileDialog GV: Nguyễn Thị Mai Trang 134 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CFileDialog  Hiển thị một open dialog hoặc save as dialog: CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL ); – bOpenFileDialog: TRUE (open dialog) , FALSE (save as dialog) – lpszDefExt: phần mở rộng, mặc định NULL – lpszFileName: Chỉ định tên file hiển thị trong editbox, mặc định là NULL – dwFlags: kết hợp một hoặc nhiều cờ cho phép chỉ định thuộc tính của dialog – lpszFilter: chỉ định các file hiển thị trong listbox GV: Nguyễn Thị Mai Trang 135 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CFileDialog  Các hàm thuộc lớp CFileDialog – GetPathName(); – GetFileName() – GetFileTitle () GV: Nguyễn Thị Mai Trang 136 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CColorDialog  Hiển thị hộp thoại // Show the Color dialog with all the default settings. CColorDialog dlg; dlg.DoModal(); // Show the fully opened Color dialog with red as the selected color. CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN); dlg.DoModal(); GV: Nguyễn Thị Mai Trang 137 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CColorDialog  Lấy trị trả về của hộp thoại CColorDialog GetColor( ) : trả về màu được chọn GV: Nguyễn Thị Mai Trang 138 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CFontDialog GV: Nguyễn Thị Mai Trang 139 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Hộp thoại CFontDialog GV: Nguyễn Thị Mai Trang 140 Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows Các hàm thuộc lớp CFontDialog – GetCurrentFont – GetFaceName – GetStyleName – GetSize – GetColor – GetWeight – IsStrikeOut – IsUnderline – IsBold – IsItalic

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf
Tài liệu liên quan