intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Nguyen Mao | Ngày: | Loại File: PDF | Số trang:36

115
lượt xem
20
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1. 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 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 2 1
  2. 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 3 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 4 2
  3. 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 5 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: W M_LBUTTONDOWN W M_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 W M_LBUTTONDOWN Đ nh nghĩa hàm x lý message W M_MOUSEMOVE Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 6 3
  4. 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; } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 7 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); } Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 8 4
  5. 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,…) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 9 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 W M_KEYDOWN Các bư c th c hi n Đ nh nghĩa hàm x lý message W M_KEYDOWN Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 10 5
  6. 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 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: 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, … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM W inter 2010 12 6
  7. X lý menu - M t vài khái ni m…(tt) Drop-down menu System menu Menu bar 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 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 14 7
  8. 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 Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 15 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, … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM W inter 2010 16 8
  9. 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 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); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM W inter 2010 18 9
  10. 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 // h y b menu cũ DestroyMenu(hMenu); 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
  11. X lý menu - T o menu…(tt) // Ví d t o menu File và Edit “run-time” hMenu = CreateMenu(); hMenuPopup = CreateMenu(); AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_NEW, "&New"); AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_OPEN, "&Open..."); AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_SAVE, "&Save"); AppendMenu(hMenuPopup, MF_STRING, IDM_FILE_SAVE_AS, "Save &As.“); AppendMenu(hMenuPopup, MF_SEPARATOR, 0, NULL); AppendMenu(hMenuPopup, MF_STRING, IDM_APP_EXIT, "E&xit"); AppendMenu(hMenu, MF_POPUP, hMenuPopup, "&File"); hMenuPopup = CreateMenu(); AppendMenu(hMenuPopup, MF_STRING, IDM_EDIT_UNDO, "&Undo"); AppendMenu(hMenuPopup, MF_SEPARATOR, 0, NULL); AppendMenu(hMenuPopup, MF_STRING, IDM_EDIT_CUT, "Cu&t"); AppendMenu(hMenuPopup, MF_STRING, IDM_EDIT_COPY, "&Copy"); AppendMenu(hMenuPopup, MF_STRING, IDM_EDIT_PASTE, "&Paste"); AppendMenu (hMenuPopup, MF_STRING, IDM_EDIT_CLEAR, "De&lete"); AppendMenu(hMenu, MF_POPUP, hMenuPopup, "&Edit"); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 21 X lý menu - Thay đ i tr ng thái menu Các hàm thay đ i tr ng thái menu CheckMenuItem EnableMenuItem GetMenuState Tr ng thái menu c n ph i đư c c p nh t tùy theo “ng c nh” c a ng d ng. VD: c n th hi n 1 d u check ( ) phía trư c menu B t/t t Status Bar item View/Status Bar Ch c năng Cut/Copy/Delete ch đư c enable khi user đánh d u ch n 1 đo n text Ch c năng Paste ch đư c enable khi clipboard khác r ng … Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM W inter 2010 22 11
  12. X lý menu - Thay đ i tr ng thái menu…(tt) // Checked/Unchecked menu item case WM_COMMAND: hMenu = GetMenu(hWnd); itemSel = LOWORD(wParam); if (itemSel==IDM_VIEW_STATUSBAR) { if (GetMenuState(hMenu, itemSel, MF_BYCOMMAND)& MF_CHECKED) nFlag = MF_UNCHECKED; else nFlag = MF_CHECKED; CheckMenuItem(hMenu, itemSel, 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
  13. X lý menu - L y thông tin c a menu…(tt) // l y thông tin menu bar c a hWnd HMENU hMenu = GetMenu(hWnd); MENUINFO menuInfo; menuInfo.cbSize = sizeof(MENUINFO); GetMenuInfo(hMenu, &menuInfo); // l y thông tin menu item “Open” HMENU hMenu = GetMenu(hWnd); MENUITEMINFO menuItemInfo; menuItemInfo.cbSize = sizeof(MENUITEMINFO); GetMenuItemInfo(hMenu, ID_FILE_OPEN, FALSE, &menuItemInfo) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 25 X lý menu - L y thông tin c a menu…(tt) // c u trúc lưu thông tin menu typedef struct tagMENUINFO { DWORD cbSize; DWORD fMask; DWORD dwStyle; UINT cyMax; HBRUSH hbrBack; DWORD dwContextHelpID; ULONG_PTR dwMenuData; } MENUINFO, FAR *LPMENUINFO; typedef MENUINFO CONST FAR *LPCMENUINFO; Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 26 13
  14. X lý menu - L y thông tin c a menu…(tt) // c u trúc lưu thông tin menu item typedef struct tagMENUITEMINFO { UINT cbSize; UINT fMask; UINT fType; UINT fState; UINT wID; HMENU hSubMenu; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; ULONG_PTR dwItemData; LPTSTR dwTypeData; UINT cch; HBITMAP hbmpItem; } MENUITEMINFO, *LPMENUITEMINFO; Windows 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 W inter 2010 28 14
  15. 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 p nh t tr ng thái c a menu hay dùng đ t o ra statusbar ch a hư ng d n chi ti t c a menu item wParam: LOWORD(wParam): ID c a menu item ho c index c a menu popup HIWORD(wParam): các thông tin khác như tr ng thái menu (MF_CHECKED, MF_GRAYED,…), lo i menu (MF_POPUP, MF_SYSMENU,…) lParam: handle c a popup menu Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 29 X lý menu - Menu messages…(tt) WM_INITMENUPOPUP: đư c g i đ n hàm x lý message trư c khi Windows hi n th popup. Message này thư ng dùng đ enable/disable menu item c a popup. VD. Enable Cut/Copy/Delete khi user đánh d u ch n 1 đo n text wParam: Handle c a popup menu lParam: LOWORD(lParam): v trí c a popup (zero based) HIWORD(lParam): u là window-menu; = TRUE n = FALSE n u không ph i Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 30 15
  16. X lý menu - Menu messages…(tt) WM_COMMAND: phát sinh khi user ch n 1 menu item wParam: LOWORD(wParam): ID c a menu item ho c c a control HIWORD(wParam): ngu n g c phát sinh, =1 n u sinh ra do dùng phím t t (accelerator); =0 n u ch n tr c ti p t menu lParam: NULL n u message này phát sinh t menu N u message phát sinh t 1 control, lParam s ch a handle c a control đó Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 31 X lý menu - Menu messages…(tt) WM_SYSCOMMAND: phát sinh khi user ch n 1 menu item trong system menu wParam: mã l nh đư c ch n, là m t trong các giá tr : SC_CLOSE, SC_MAXIMIZE, SC_MINIMIZE, SC_MOVE, SC_RESTORE, SC_SIZE,… lParam: LOWORD(lParam): t a đ x c a cursor (screen coordinate) HIWORD(lParam): t a đ y c a cursor (screen coordinate) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 32 16
  17. 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 ni m Dialog box: là phương ti n chính đ nh p li u (input) t user. Thông thư ng, dialog là m t popup-window ch a các control. ng d ng t o dialog b ng cách g i hàm CreateDialog/DialogBox mà không c n đăng ký l p c a s . Control: là d ng “c a s đi u khi n” chuyên bi t, vd. Button, Edit, Listbox,… M i control có m t ID phân bi t Dialog box template: là resource script đ đ nh nghĩa v trí, kích thư c, ID,… c a các control trong dialog Dialog box procedure: hàm x lý message cho dialog Modal dialog: là d ng dialog ph bi n nh t. Khi m modal dialog, user không đư c phép chuy n (focus) sang c a s khác c a cùng ng d ng. Vd. Open, Font,… Modeless dialog: user v n có th chuy n (focus) gi a modeless 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
  18. 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 GetDlgItem GetDlgItemInt GetDlgItemText IsDlgButtonChecked IsDialogMessage SendDlgItemMessage SetDlgItemInt SetDlgItemText Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 36 18
  19. 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 box…(tt) xxx.rc #define IDC_BLACK 1000 #define IDC_BLUE 1001 #define IDC_GREEN 1002 #define IDC_CYAN 1003 #define IDC_RED 1004 #define IDC_MAGENTA 1005 #define IDC_YELLOW 1006 #define IDC_WHITE 1007 #define IDC_RECT 1008 #define IDC_ELLIPSE 1009 #define IDC_PAINT 1010 // t o dialog DialogBox(hInstance, MAKEINTRESOURCE(IDD_COLORDLG), hWnd,(DLGPROC)colorDlgProc); Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM W inter 2010 38 19
  20. Xây d ng modal dialog box…(tt) // hàm x lý message // color ñang ch n int iCurrentColor = IDC_RED; // figure ñang ch n int iCurrentFigure = IDC_ELLIPSE; BOOL CALLBACK colorDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hCtrlFigure; static int iColor, iFigure; switch (message) { case WM_INITDIALOG: iColor = iCurrentColor; iFigure = iCurrentFigure; CheckRadioButton(hDlg, IDC_BLACK, IDC_WHITE, iColor); CheckRadioButton(hDlg, IDC_RECT, IDC_ELLIPSE, iFigure); hCtrlFigure = GetDlgItem(hDlg, IDC_PAINT); SetFocus(GetDlgItem(hDlg, iColor)); return FALSE; (Còn ti p…) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 39 Xây d ng modal dialog box…(tt) // hàm x lý message…(tt) case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: // lưu l i giá tr Color và Figure r i thoát iCurrentColor = iColor; iCurrentFigure = iFigure; EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: // k t thúc dialog nhưng không thay ñ i giá // tr Color, Figure EndDialog(hDlg, FALSE); return TRUE; (Còn ti p…) Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM Winter 2010 40 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2