Bài giảng lập trình Windows - Xử lý dao diện người dùng

36 2 0
Bài giảng lập trình Windows - Xử lý dao diện người dùng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu tham khảo cho các bạn học chuyên ngành. Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu được. Nó phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể dùng nó giải quyết các bài toán khác.

Lập trình Windows (Windows Programming) Xử lý giao diện người dùng (User Interface) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn Nội dung Xử lý Mouse Keyboard Xử lý menu Xây dựng 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý Mouse Keyboard Xử lý mouse Thơng điệp mouse Ví dụ: Vẽ hình mouse Xử lý keyboard Thơng điệp keyboard Ví dụ: Xử lý phím nhấn Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Winter 2010 Xử lý Mouse Thông điệp mouse WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE WM_MOUSEWHEEL Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Xử lý Mouse…(tt) Thông điệp mouse (tt) Với thông điệp mouse, Windows gởi kèm tham số wParam lParam wParam: cho biết phím nhấn (Ctrl, Shift,…) lParam: cho biết toạ độ LOWORD(lParam): tọa độ x HIWORD(lParam): tọa độ y Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý Mouse…(tt) Ví dụ: Vẽ hình mouse Mơ tả: user nhấn giữ nút trái chuột & di chuyển đường thẳng vẽ Các xử lý cần thiết: WM_LBUTTONDOWN WM_MOUSEMOVE Các bước thực hiện: Định nghĩa 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý Mouse…(tt) Vẽ hình mouse…(tt) void OnLButtonDown(int &x1, int &y1, int &x2, int &y2, int x, int y) { x1 = x2 = x; y1 = y2 = y; } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý Mouse…(tt) Vẽ hình 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); } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý keyboard Các message keyboard WM_KEYDOWN / WM_KEYUP: phát sinh phím (khơng phải phím hệ thống) nhấn xuống/thả wParam: virtual-key code lParam: chứa thơng tin khác (số lần lặp lại phím, scan code, extended key,…) WM_CHAR: kết phát sinh message WM_KEYDOWN, báo hiệu ký tự in (printed character) tạo wParam: mã ký tự lParam: chứa thông tin khác (số lần lặp lại nhấn giữ phím, có phím Alt nhấn kèm,…) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý keyboard…(tt) Ví dụ: Xử lý phím nhấn Mơ tả: user nhấn phím thơng báo hiển thị MessageBox Các xử lý cần thiết WM_KEYDOWN Các bước thực Định nghĩa hàm xử lý message WM_KEYDOWN Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 10 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 menu Menu messages Ví dụ Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 11 Xử lý menu - Một vài khái niệm Menu bar: menu Bao gồm nhiều drop-down menu menu item Tên gọi khác: main menu, top-level menu Drop-down menu: phần menu bar, chứa menu item 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 lệnh ứng dụng Mỗi menu item xác định số nguyên phân biệt, gọi item ID hay command ID VD Open, Save, … System menu: chứa lệnh hệ thống điều khiển cửa sổ VD Minimize, Maximize, Close, … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 12 Xử lý menu - Một vài khái niệm…(tt) Drop-down menu Menu bar System menu Menu item Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 13 Xử lý menu - Một vài khái niệm…(tt) Các trạng thái menu item: Checked / Unchecked - áp dụng cho menu item bên popup Top-level menu item khơng có tính chất Enabled, Disabled, Grayed - HĐH Windows gởi message WM_COMMAND cho menu item trạng thái Enabled Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 14 Xử lý menu - Một vài khái niệm…(tt) Cấu trúc menu Menu bar, Drop-down menu, System menu: quản lý menu handle Menu item: quản lý số ID (item ID) ID gởi đến ứng dụng với message WM_COMMAND Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 15 Xử lý menu - Tạo menu Thường có cách để tạo menu: Tạo menu dạng resource ứng dụng, load vào chạy ứng dụng Tạo trực tiếp hàm ứng dụng chạy Các hàm thường dùng: CreateMenu, InsertMenu, … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 16 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 17 Xử lý menu - Tạo menu…(tt) Tham chiếu đến menu window class wc.lpszMenuName = (LPCSTR) IDC_MAINMENU; Xác định menu 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); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 18 Xử lý menu - Tạo menu…(tt) Thay đổi menu bar: hMenu2 = LoadMenu(hInstance, MAKEINTRESOURCE(IDC_2NDMENU)); SetMenu(hWnd, hMenu2); DrawMenuBar(hWnd); DestroyMenu(hMenu); // vẽ lại menu // hủy bỏ menu cũ Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 19 Xử lý menu - Tạo menu…(tt) Các hàm tạo menu “run-time” CreateMenu CreatePopupMenu AppendMenu InsertMenu InsertMenuItem Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 20 10 Xây dựng modeless dialog box Tạo dialog: dùng hàm CreateDialog hay CreateDialogParam ShowWindow Kết thúc dialog: dùng hàm DestroyWindow Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 43 Xây dựng modeless dialog box…(tt) Các điểm khác modeless modal dialog Cần có style WS_VISIBLE định nghĩa dialog template STYLE WS_POPUP ¦ WS_CAPTION ¦ WS_SYSMENU ¦ WS_VISIBLE Hàm CreateDialog return sau tạo xong dialog lưu lại dialog handle biến toàn cục HWND cần hModelessDlg = NULL; // Handle Modeless // dialog hModelessDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MYDIALOG), hWnd, (DLGPROC)MyDialogProc); ShowWindow(hModelessDlg, SW_SHOW); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 44 22 Xây dựng modeless dialog box…(tt) Các điểm khác modeless modal dialog…(tt) Các message modeless dialog qua application queue, đó, loop message cần tách riêng message gởi đến hàm xử lý message modeless dialog // Loop message while (GetMessage(&msg, NULL, NULL, NULL)) if (hModelessDlg==NULL || !IsDialogMessage(hModelessDlg, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 45 Xây dựng modeless dialog box…(tt) Các điểm khác modeless modal dialog…(tt) Kết thúc dialog hàm DestroyWindow thay EndDialog case WM_CLOSE : DestroyWindow(hDlg); hModelessDlg = NULL; return TRUE; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 46 23 Multi Document Interface (MDI) Mục đích Phân cấp tổ chức Các bước xây dựng giao diện MDI Các vấn đề khác Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 47 MDI - Mục đích MDI dạng ứng dụng đặc biệt quản lý nhiều “cửa sổ chứa tài liệu” (document window) Các tài liệu hiển thị riêng biệt cửa sổ (child window) bên vùng client cửa sổ (frame window) VD Excel, Word, PowerPoint,… Windows Programming - User Interface - Nguyen 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 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 Tp.HCM Client window Winter 2010 50 25 MDI - Phân cấp tổ chức…(tt) Các thành phần MDI Frame window: thường có title bar, menu, sizing border, system menu icon, minimize/maximize/close buttons Vùng client không dùng để hiển thị liệu Child window: thường có title bar, sizing border, system menu icon, minimize/maximize/close buttons, (có thể) scroll bars Child window khơng có menu riêng (dùng chung menu với frame window) Có thể có nhiều child window class ứng dụng MDI Client window: cửa sổ đặc biệt, thuộc lớp MDICLIENT (Win32 API định nghĩa sẵn) Có nhiệm vụ quản lý tất child window Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 51 MDI - Phân cấp tổ chức…(tt) Các đặc tính MDI Khi child window trạng thái minimize, thể title bar bên client area Khi child window trạng thái maximize, title bar khơng cịn, title child window thêm vào phía sau title frame window Các phím tắt hệ thống: Ctrl-F4, Ctrl-F6, Alt- Thường có popup “Window” menu-bar để quản lý chức 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 dựng giao diện MDI Đăng ký lớp cửa sổ frame window WNDCLASS wc; wc.lpszClassName = “MDI_FRAME”; wc.lpfnWndProc = (WNDPROC) FrameWndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor((HANDLE) NULL, IDC_ARROW); wc.hIcon = LoadIcon(hInstance, IDC_FRAME); wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1); wc.lpszMenuName = IDM_FRAME_MENU; wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; if (!RegisterClass(&wc)) return FALSE; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 54 27 Các bước xây dựng giao diện MDI…(tt) Đăng ký lớp cửa sổ “Hello child window” WNDCLASS wc; wc.lpszClassName = “MDI_HELLO_CHILD”; wc.lpfnWndProc = (WNDPROC) HelloWndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(hInstance,(LPSTR)IDC_TEXTCUR); wc.hIcon = LoadIcon(hInstance, IDC_TEXTICON); wc.lpszMenuName = (LPCTSTR) NULL; wc.cbWndExtra = CB_HELLOCHILDEXTRA; if (!RegisterClass(&wc)) return FALSE; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 55 Các bước xây dựng giao diện MDI…(tt) Đăng ký lớp cửa sổ “Rect child window” WNDCLASS wc; wc.lpszClassName = “MDI_RECT_CHILD”; wc.lpfnWndProc = (WNDPROC) RectWndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(hInstance,(LPSTR)IDC_RECTCUR); wc.hIcon = LoadIcon(hInstance, IDC_RECTICON); wc.lpszMenuName = (LPCTSTR) NULL; wc.cbWndExtra = CB_RECTCHILDEXTRA; if (!RegisterClass(&wc)) return FALSE; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 56 28 Các bước xây dựng giao diện MDI…(tt) Tạo Client window: case WM_CREATE: // hàm FrameWndProc CLIENTCREATESTRUCT ccs; ccs.hWindowMenu = GetSubMenu(GetMenu(hWnd), WINDOW_MENU_POS); ccs.idFirstChild = IDM_WINDOW_1ST_CHILD; hwndMDIClient = CreateWindow("MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, hWnd, (HMENU) NULL, hInstance, (LPSTR) &ccs); ShowWindow(hwndMDIClient, SW_SHOW); return 0; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 57 Các bước xây dựng giao diện MDI…(tt) Hàm xử lý message frame window [1] case WM_SIZE: UINT w, h; // Cập nhật kích thước Client window // theo kích thước frame window w = LOWORD(lParam); h = HIWORD(lParam); MoveWindow(hwndMDIClient, 0, 0, w, h, TRUE); break; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 58 29 Các bước xây dựng giao diện MDI…(tt) Hàm xử lý message frame window [2] Hàm xử lý mặc định return DefFrameProc(hWnd, hwndMDIClient, message, wParam, lParam); Các message cần chuyển đến hàm DefFrameProc chương trình xử lý WM_COMMAND WM_MENUCHAR WM_SETFOCUS WM_SIZE Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 59 Các bước xây dựng giao diện MDI…(tt) Hàm xử lý message child window Hàm xử lý mặc định return DefMDIChildProc(hMDIWnd, message, wParam, lParam); Các message cần chuyển đến hàm DefMDIChildProc chương trình xử lý WM_MDIACTIVATE WM_GETMINMAXINFO WM_MENUCHAR WM_MOVE WM_SETFOCUS WM_SIZE WM_SYSCOMMAND Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 60 30 Các bước xây dựng giao diện MDI…(tt) Tạo child window char szHelloTitle[] = “Document 3”; // cần thay ñổi MDICREATESTRUCT mdiCreate; mdiCreate.szClass = (LPCSTR) “MDI_HELLO_CHILD”; mdiCreate.szTitle = szHelloTitle; mdiCreate.hOwner = hInstance; mdiCreate.x = CW_USEDEFAULT; mdiCreate.y = CW_USEDEFAULT; mdiCreate.cx = CW_USEDEFAULT; mdiCreate.cy = CW_USEDEFAULT; mdiCreate.style = 0; // Tham số “mở”, chuyển ñến WM_CREATE mdiCreate.lParam = NULL; SendMessage(hwndMDIClient, WM_MDICREATE, 0, (LONG) (LPMDICREATESTRUCT) &mdiCreate); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 61 Các bước xây dựng giao diện MDI…(tt) Tạo child window Child window tạo active nằm top so với child window trước Client window thêm menu item vào popup “Window” menu-bar Item menu thêm vào popup Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 62 31 MDI - Các vấn đề khác System Accelerators Menu “Window” Child window data Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 63 MDI - Các vấn đề khác…(tt) System Accelerators Alt + Ctrl + F4 Ctrl + F6 : mở system menu : đóng child window : activate child window // Loop message while (GetMessage(&msg, (HWND) NULL, 0, 0)) if (!TranslateMDISysAccel(hwndMDIClient,&msg) && !TranslateAccelerator(hFrameWnd,hAccel,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } 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 - Các vấn đề khác…(tt) Xử lý enum – Close All case ID_WINDOW_CLOSEALL: EnumChildWindows(hwndMDIClient, MDICloseProc, 0L); break; // Hàm callback LRESULT CALLBACK MDICloseProc(HWND hMDIWnd, LPARAM lParam) { SendMessage(hwndMDIClient, WM_MDIDESTROY, (WPARAM) hMDIWnd, 0L); return 1; } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 66 33 MDI - Các vấn đề khác…(tt) Child window data Với MDI, user mở nhiều child window, child window thường cần lưu trữ liệu riêng Cần có giải pháp giúp quản lý data child window cách hiệu ? 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 byte mở rộng dành riêng cho child window wc.cbWndExtra = CB_CHILDEXTRA; // 4,8,12… bytes Cấu trúc thông tin Cấu trúc thông tin Các byte mở rộng Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 68 34 MDI - Các vấn đề khác…(tt) // Định nghĩa cấu trúc lưu trữ data child window struct DATA_1 { int nTypeOfWind; …… } struct DATA_2 { …… } // Loại child window // Tạo child window cấp phát data mdiCreate.lParam = nTypeOfWind; SendMessage(hwndMDIClient, WM_MDICREATE, 0, (LONG) (LPMDICREATESTRUCT) &mdiCreate); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 69 MDI - Các vấn đề khác…(tt) // Hàm xử lý message child window case WM_CREATE: int nTypeOfWind = (int) (((LPCREATESTRUCT) lParam)->lpCreateParams); // Khởi tạo cấu trúc data struct DATA_1 *data_1 = (struct DATA_1 *)malloc(sizeof(struct DATA_1)); strData_1->nTypeOfWind = nTypeOfWind; …… SetWindowLong(hMDIWnd, 0, data_1); // Khởi tạo cấu trúc data struct DATA_2 *data_2 = (struct DATA_2 *)malloc(sizeof(struct DATA_2)); …… SetWindowLong(hMDIWnd, 4, data_2); return 0; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 70 35 MDI - Các vấn đề khác…(tt) Kích hoạt (Activate) child window WM_MDIACTIVATE Thường dùng để cập nhật trạng thái ứng dụng (tùy theo child window active) VD Cập nhật menu // Hàm xử lý message child window case 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 .. .Xử lý Mouse Keyboard Xử lý mouse Thông điệp mouse Ví dụ: Vẽ hình mouse Xử lý keyboard Thơng điệp keyboard Ví dụ: Xử lý phím nhấn Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN... kèm,…) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 Xử lý keyboard…(tt) Ví dụ: Xử lý phím nhấn Mơ tả: user nhấn phím thơng báo hiển thị MessageBox Các xử lý. .. … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 12 Xử lý menu - Một vài khái niệm…(tt) Drop-down menu Menu bar System menu Menu item Windows Programming -

Ngày đăng: 11/05/2021, 00:13

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan