1. Trang chủ
  2. » Công Nghệ Thông Tin

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

36 460 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Bài giảng lập trình Windows - Xử lý giao diện người dùng potx
Tác giả Nguyen Tri Tuan
Trường học Trường Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh
Chuyên ngành Computer Science
Thể loại Giáo trình
Năm xuất bản Winter 2010
Thành phố Hồ Chí Minh
Định dạng
Số trang 36
Dung lượng 410,83 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17MENUITEM "E&xit", ID_APP_EXIT END... Winter 2010Windows Programming - User Interface - Nguyen Tri Tua

Trang 1

L ậ p trình Windows (Windows Programming)

 Xây d ự ng và x ử lý h ộ p tho ạ i (Dialog box)

 Các h ộ p tho ạ i chu ẩ n (Common Dialog boxes)

Trang 2

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 3

Trang 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

Trang 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) {

void OnMouseMove(HWND hWnd, UINT nFlags, int x1,

int y1, int &x2, int &y2, int x, int y) {

if (!(nFlags & MK_LBUTTON)) break;

Trang 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

Trang 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

 Ví d ụ

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

Trang 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

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

Trang 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)

Trang 9

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17

MENUITEM "E&xit", ID_APP_EXIT END

Trang 10

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19

Trang 11

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 21

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");

X ử lý menu - Thay đổ i tr ạ ng thái menu

 Các hàm thay đổ i tr ạ ng thái menu

 B ậ t/t ắ t Status Bar  c ầ n th ể hi ệ n 1 d ấ u check (  ) phía tr ướ c menu

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

 …

Trang 12

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 23

X ử lý menu - Thay đổ i tr ạ ng thái menu…(tt)

// Checked/Unchecked menu item

else nFlag = MF_CHECKED;

CheckMenuItem(hMenu,

itemSel, nFlag | MF_BYCOMMAND);

}

X ử lý menu - L ấ y thông tin c ủ a menu

 Các hàm cung c ấ p thông tin c ủ a menu

Trang 13

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 25

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)

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 {

} MENUINFO, FAR *LPMENUINFO;

typedef MENUINFO CONST FAR *LPCMENUINFO;

Trang 14

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 27

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 {

Trang 15

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 29

X ử lý menu - Menu messages…(tt)

 WM_MENUSELECT: phát sinh khi user tác độ ng (di

chuyn 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

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

Trang 16

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 31

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 đ ó

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)

Trang 17

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 33

Xây d ự ng và x ử lý h ộ p tho ạ i (Dialog box)

 Các khái ni ệ m

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 “ca s ổ đ iu khin” 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

Trang 18

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 35

Các message th ườ ng dùng cho dialog

Trang 19

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 37

Xây d ự ng modal dialog box

Trang 20

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 39

Xây d ự ng modal dialog box…(tt)

// hàm x ử lý message

int iCurrentColor = IDC_RED; // color ñ ang chn

int iCurrentFigure = IDC_ELLIPSE; // figure ñ ang chn

BOOL CALLBACK colorDlgProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam) {

CheckRadioButton(hDlg, IDC_BLACK, IDC_WHITE, iColor);

CheckRadioButton(hDlg, IDC_RECT, IDC_ELLIPSE, iFigure);

hCtrlFigure = GetDlgItem(hDlg, IDC_PAINT);

Trang 21

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 41

Xây d ự ng modal dialog box…(tt)

// tô màu li figure theo màu mi chn

PaintTheFigure(hCtrlFigure, iColor, iFigure);

Trang 22

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 43

Xây d ự ng modeless dialog box

Xây d ự ng modeless dialog box…(tt)

 Các đ i ể m khác nhau gi ữ a modeless và modal dialog

 C ầ n có style WS_VISIBLE khi đị nh ngh ĩ a dialog template

STYLE WS_POPUP ¦ WS_CAPTION ¦ WS_SYSMENU ¦

WS_VISIBLE

 Hàm CreateDialog s ẽ return ngay sau khi t ạ o xong dialog  c ầ n

l ư u l ạ i dialog handle trong m ộ t bi ế n toàn c ụ c

HWND hModelessDlg = NULL; // Handle ca Modeless

// dialog hModelessDlg = CreateDialog(hInstance,

Trang 23

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 45

Xây d ự ng modeless dialog box…(tt)

 Các đ i ể m khác nhau gi ữ a modeless và modal dialog…(tt)

 Các message c ủ a modeless dialog s ẽ đ i qua application

queue, do đ ó, loop message c ầ n tách riêng các message này

và g ở i đế n hàm x ử lý message c ủ a modeless dialog

// Loop message

while (GetMessage(&msg, NULL, NULL, NULL))

if (hModelessDlg==NULL ||

!IsDialogMessage(hModelessDlg, &msg)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

Xây d ự ng modeless dialog box…(tt)

 Các đ i ể m khác nhau gi ữ a modeless và modal

Trang 24

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 47

Multi Document Interface (MDI)

nhi ề u “ca s cha tài liu” (document window)

 Các tài li ệ u đượ c hi ể n th ị riêng bi ệ t trong các ca

s con (child window) bên trong vùng client c ủ a

ca s chính (frame window)

 VD Excel, Word, PowerPoint,…

Trang 25

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 49

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

Trang 26

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 51

MDI - Phân c ấ p t ổ ch ứ c…(tt)

 Các thành ph ầ n c ủ a MDI

 Frame window : th ườ ng có title bar, menu, sizing border,

system menu icon, và minimize/maximize/close buttons

Vùng client không dùng để hi ể n th ị d ữ li ệ u

 Child window : th ườ ng có title bar, sizing border, system

menu icon, minimize/maximize/close buttons, và (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 trong m ộ t ứ ng d ụ ng MDI.

 Client window : đ ây là m ộ t 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 c ả child window.

MDI - Phân c ấ p t ổ ch ứ c…(tt)

 Các đặ c tính c ủ a MDI

 Khi child window ở tr ạ ng thái minimize, nó đượ c th ể hi ệ n

b ằ ng title bar ở bên d ướ i client area

 Khi child window ở tr ạ ng thái maximize, title bar c ủ a nó

s ẽ không còn, title c ủ a child window s ẽ đượ c thêm vào

phía sau title c ủ a frame window

 Các phím t ắ t h ệ th ố ng: CtrlF4, CtrlF6, Alt

-Th ườ ng s ẽ có m ộ t popup “Window” trên menu-bar để

Trang 27

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 53

MDI - Phân c ấ p t ổ ch ứ c…(tt)

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);

Trang 28

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 55

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Đă ng ký l ớ p c ử a s ổ “Hello child window”

if (!RegisterClass(&wc)) return FALSE;

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Đă ng ký l ớ p c ử a s ổ “Rect child window”

Trang 29

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 57

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

0, 0, 0, 0, hWnd,

(HMENU) NULL, hInstance, (LPSTR) &ccs);

ShowWindow(hwndMDIClient, SW_SHOW);

return 0;

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Hàm x ử lý message c ủ a 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;

Trang 30

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 59

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Hàm x ử lý message c ủ a frame window [2]

 Hàm x ử lý m ặ c đị nh

return DefFrameProc(hWnd, hwndMDIClient,

message, wParam, lParam);

 Các message c ầ n đượ c chuy ể n đế n hàm DefFrameProc

ngay c ả khi ch ươ ng trình đ ã x ử lý

 WM_COMMAND

 WM_MENUCHAR

 WM_SETFOCUS

 WM_SIZE

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Hàm x ử lý message c ủ a child window

 Hàm x ử lý m ặ c đị nh

return DefMDIChildProc(hMDIWnd, message,

wParam, lParam);

 Các message c ầ n đượ c chuy ể n đế n hàm

DefMDIChildProc ngay c ả khi ch ươ ng trình đ ã x ử lý

 WM_MDIACTIVATE

 WM_GETMINMAXINFO

 WM_MENUCHAR

Trang 31

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 61

Các b ướ c xây d ự ng giao di ệ n MDI…(tt)

 Child window m ớ i t ạ o s ẽ đượ c active và n ằ m ở top so

v ớ i các child window tr ướ c

 Client window s ẽ thêm m ộ t menu item vào popup

“Window” trên menu-bar

Item menu m ớ i thêm vào popup

Trang 32

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 63

Trang 33

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 65

Arrange Icons WM_MDIICONARRANGE

Close All X ử lý enum

SendMessage(hwndMDIClient, WM_MDIDESTROY,

(WPARAM) hMDIWnd, 0L);

return 1;

}

Trang 34

Winter 2010Windows Programming - User Interface - Nguyen Tri Tuan - DH.KHTN Tp.HCM 67

MDI - Các v ấ n đề khác…(tt)

 Child window data

 V ớ i MDI, user có th ể m ở nhi ề u child window, m ỗ i child

window th ườ ng c ầ n l ư u tr ữ các d ữ li ệ u riêng

 C ầ n có gi ả i pháp giúp qu ả n lý data c ủ a m ỗ i child

window m ộ t cách hi ệ u qu ả ?

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

Caáu truùc thoâng tin 1

Ngày đăng: 12/07/2014, 23:20

HÌNH ẢNH LIÊN QUAN

Sơ đồ phân cấp cửa sổ cha-con trong MDI - Bài giảng lập trình Windows - Xử lý dao diện người dùng potx
Sơ đồ ph ân cấp cửa sổ cha-con trong MDI (Trang 25)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm