Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
410,83 KB
Nội dung
1 Lập trình Windows (Windows Programming) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn Xử lý giao diện người dùng (User Interface) Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 2 Nội dung Xử lý Mouse và Keyboard Xử lý menu Xây dựng và xử lý hộp thoại (Dialog box) Các hộp thoại chuẩn (Common Dialog boxes) Toolbar, Statusbar Các Control MDI – Multi Document Interface 2 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 3 Xử lý Mouse và Keyboard Xử lý mouse Thông điệp của mouse Ví dụ: Vẽ hình bằng mouse Xử lý keyboard Thông điệp của keyboard Ví dụ: Xử lý phím nhấn Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 4 Xử lý Mouse Thông điệp của mouse WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE WM_MOUSEWHEEL 3 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 5 Xử lý Mouse…(tt) Thông điệp của mouse (tt) Với mỗi thông điệp của mouse, Windows gởi kèm 2 tham số wParam và lParam wParam: cho biết phím nào đang được nhấn (Ctrl, Shift,…) lParam: cho biết toạ độ hiện tại LOWORD(lParam): tọa độ x HIWORD(lParam): tọa độ y Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 6 Xử lý Mouse…(tt) Ví dụ: Vẽ hình bằng mouse Mô tả: khi user nhấn giữ nút trái chuột & di chuyển vẽ 1 đường thẳng Các xử lý cần thiết: WM_LBUTTONDOWN WM_MOUSEMOVE Các bước thực hiện: Định nghĩa 4 biến (x1, y1) – (x2, y2) Định nghĩa hàm xử lý message WM_LBUTTONDOWN Định nghĩa hàm xử lý message WM_MOUSEMOVE 4 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 7 Xử lý Mouse…(tt) Vẽ hình bằng mouse…(tt) void OnLButtonDown(int &x1, int &y1, int &x2, int &y2, int x, int y) { x1 = x2 = x; y1 = y2 = y; } Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 8 Xử lý Mouse…(tt) Vẽ hình bằng mouse…(tt) void OnMouseMove(HWND hWnd, UINT nFlags, int x1, int y1, int &x2, int &y2, int x, int y) { if (!(nFlags & MK_LBUTTON)) break; HDC dc = GetDC(hWnd); // xoa duong cu SetROP2(dc, R2_NOTXORPEN); MoveToEx(dc, x1, y1, NULL); LineTo(dc, x2, y2); // ve duong moi x2 = x; y2 = y; MoveToEx(dc, x1, y1, NULL); LineTo(dc, x2, y2); ReleaseDC(hWnd, dc); } 5 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 9 Xử lý keyboard Các message của keyboard WM_KEYDOWN / WM_KEYUP: phát sinh khi 1 phím (không phải là phím hệ thống) được nhấn xuống/thả ra wParam: virtual-key code lParam: chứa các thông tin khác (số lần lặp lại phím, scan code, extended key,…) WM_CHAR: là kết quả phát sinh do message WM_KEYDOWN, báo hiệu 1 ký tự in được (printed character) đã được tạo ra wParam: mã ký tự lParam: chứa các thông tin khác (số lần lặp lại do nhấn giữ phím, có phím Alt nhấn kèm,…) Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 10 Xử lý keyboard…(tt) Ví dụ: Xử lý phím nhấn Mô tả: khi user nhấn một phím hiển thị 1 MessageBox thông báo Các xử lý cần thiết WM_KEYDOWN Các bước thực hiện Định nghĩa hàm xử lý message WM_KEYDOWN 6 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11 Xử lý menu Một vài khái niệm Tạo menu Thay đổi trạng thái menu Lấy thông tin của menu Menu messages Ví dụ Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 12 Xử lý menu - Một vài khái niệm Menu bar: thanh menu. Bao gồm nhiều drop-down menu và menu item. Tên gọi khác: main menu, top-level menu Drop-down menu: là một phần của menu bar, chứa các menu item hoặc các drop-down menu khác. VD. File, Edit, … Tên gọi khác: popup menu, sub-menu Menu item: tương ứng với 1 lệnh của ứng dụng. Mỗi menu item được xác định bằng 1 số nguyên phân biệt, gọi là item ID hay command ID. VD. Open, Save, … System menu: chứa các lệnh hệ thống điều khiển cửa sổ. VD. Minimize, Maximize, Close, … 7 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 13 Xử lý menu - Một vài khái niệm…(tt) System menu Menu bar Drop-down menu Menu item Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 14 Xử lý menu - Một vài khái niệm…(tt) Các trạng thái của menu item: Checked / Unchecked - chỉ áp dụng cho các menu item bên trong popup. Top-level menu item không có tính chất này Enabled, Disabled, Grayed - HĐH Windows chỉ gởi message WM_COMMAND cho các menu item ở trạng thái Enabled 8 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 15 Xử lý menu - Một vài khái niệm…(tt) Cấu trúc menu Menu bar, Drop-down menu, System menu: được quản lý bằng menu handle Menu item: được quản lý bằng số ID (item ID). ID này sẽ được gởi đến ứng dụng cùng với message WM_COMMAND Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 16 Xử lý menu - Tạo menu Thường có 2 cách để tạo menu: Tạo menu ở dạng resource của ứng dụng, và load vào khi chạy ứng dụng Tạo trực tiếp bằng các hàm khi ứng dụng đang chạy. Các hàm thường dùng: CreateMenu, InsertMenu, … 9 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17 Xử lý menu - Tạo menu…(tt) xxx.rc IDC_MAINMENU MENU PRELOAD DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New\tCtrl+N", ID_FILE_NEW MENUITEM "&Open \tCtrl+O", ID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "E&xit", ID_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE END END Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 18 Xử lý menu - Tạo menu…(tt) Tham chiếu đến menu trong window class wc.lpszMenuName = (LPCSTR) IDC_MAINMENU; Xác định menu khi tạo cửa sổ: hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDC_MAINMENU)); // sử dụng hMenu, overwrite giá trị wc.lpszMenuName hWnd = CreateWindow(TEXT("MyClass"), TEXT("Window Caption"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu, hInstance, NULL); 10 Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19 Xử lý menu - Tạo menu…(tt) Thay đổi menu bar: hMenu2 = LoadMenu(hInstance, MAKEINTRESOURCE(IDC_2NDMENU)); SetMenu(hWnd, hMenu2); DrawMenuBar(hWnd); // vẽ lại menu mới DestroyMenu(hMenu); // hủy bỏ menu cũ Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 20 Xử lý menu - Tạo menu…(tt) Các hàm tạo menu “run-time” CreateMenu CreatePopupMenu AppendMenu InsertMenu InsertMenuItem [...]... c a frame window Các phím t t h th ng: Ctrl-F4, Ctrl-F6, Alt- Thư ng s có m t popup “Window” trên menu-bar đ qu n lý các ch c năng liên quan đ n child window VD Tile, Cascade, Close all,… Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 52 26 MDI - Phân c p t ch c…(tt) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 53 Các bư c xây... Tri Tuan - DH.KHTN Tp.HCM Winter 2010 48 24 MDI - Phân c p t ch c Frame window (main app window) Client window Child wind Child wind Child wind … Child wind Sơ đ phân c p c a s cha-con trong MDI Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 49 MDI - Phân c p t ch c…(tt) Frame window Các child window Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN... nFlag | MF_BYCOMMAND); } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 23 X lý menu - L y thơng tin c a menu Các hàm cung c p thơng tin c a menu GetMenu GetSubMenu GetSystemMenu GetMenuInfo GetMenuItemID GetMenuItemInfo GetMenuState GetMenuString Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 24 12 X lý menu - L y thơng tin c a menu…(tt)... } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 64 32 MDI - Các v n đ khác…(tt) Menu “Window” Menu item Cách x lý Tile WM_MDITILE Cascade WM_MDICASCADE Arrange Icons WM_MDIICONARRANGE Close All X lý enum VD SendMessage(hwndMDIClient,WM_MDITILE, MDITILE_SKIPDISABLED, 0L); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 65 MDI -. .. WM_MDIACTIVATE: struct DATA_1 *data_1 = (struct DATA_1 *) GetWindowLong(hMDIWnd, 0); if (data_ 1-> nTypeOfWind==1) “X lý 1” else “X lý 2” …… break; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 71 Winter 2010 72 Cám ơn - H i & Đáp Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 36 ... Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 27 X lý menu – Menu messages Các thơng đi p c a menu WM_MENUSELECT WM_INITMENUPOPUP WM_COMMAND WM_SYSCOMMAND Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 28 14 X lý menu - Menu messages…(tt) WM_MENUSELECT: phát sinh khi user tác đ ng (di chuy n mouse hay cursor) lên menu Thơng đi p này có th dùng. .. c a cursor (screen coordinate) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 32 16 Xây d ng và x lý h p tho i (Dialog box) Các khái ni m Các message thư ng dùng cho dialog Các hàm thư ng dùng cho dialog Xây d ng modal dialog box Xây d ng modeless dialog box Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 33 Dialog Box – Các khái... dialog và c a s khác c a cùng ng d ng Vd Find, Replace, Spell check,… Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 34 17 Các message thư ng dùng cho dialog WM_INITDIALOG WM_COMMAND WM_CLOSE Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 35 Các hàm thư ng dùng cho dialog CheckDlgButton CheckRadioButton EnableWindow GetDlgCtrlID... IsDialogMessage SendDlgItemMessage SetDlgItemInt SetDlgItemText Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 36 18 Xây d ng modal dialog box T o dialog: dùng hàm DialogBox hay DialogBoxParam K t thúc dialog: dùng hàm EndDialog Ví d : T o dialog “Color” như hình v Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 37 Xây d ng modal dialog... n lý data c a m i child window m t cách hi u qu ? Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 67 MDI - Các v n đ khác…(tt) Gi i pháp qu n lý child window data: S d ng các byte m r ng dành riêng cho m i child window wc.cbWndExtra = CB_CHILDEXTRA; // 4,8,12… bytes Cấu trúc thông tin 1 Cấu trúc thông tin 2 Các byte mở rộng Windows Programming - User Interface - . 1 Lập trình Windows (Windows Programming) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn Xử lý giao diện người dùng (User Interface) Winter 201 0Windows Programming. Interface 2 Winter 201 0Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 3 Xử lý Mouse và Keyboard Xử lý mouse Thông điệp của mouse Ví dụ: Vẽ hình bằng mouse Xử lý keyboard . Các xử lý cần thiết WM_KEYDOWN Các bước thực hiện Định nghĩa hàm xử lý message WM_KEYDOWN 6 Winter 201 0Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11 Xử lý menu