Tải bản đầy đủ (.pdf) (66 trang)

Bài giảng Visual C

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (856.67 KB, 66 trang )

1
L
L


p tr
p tr
ì
ì
nh trên môi trư
nh trên môi trư


ng Windows
ng Windows
K
K


THU
THU


T L
T L


P TRÌNH VISUAL C++
P TRÌNH VISUAL C++
(MFC)
(MFC)


N
N


i dung tr
i dung tr
ì
ì
nh b
nh b
à
à
y
y


Gi
Gi


i thi
i thi


u v
u v


MFC
MFC



Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên


X
X


lý Mouse v
lý Mouse v
à
à
Keyboard
Keyboard


M
M



t s
t s


l
l


p thư
p thư


ng g
ng g


p: CWnd, CString,..
p: CWnd, CString,..


C
C
á
á
c control thư
c control thư


ng g
ng g



p
p


C
C
á
á
c dialog thư
c dialog thư


ng g
ng g


p
p


X
X


lý menu
lý menu
2
Gi

Gi


i thi
i thi


u v
u v


MFC
MFC


MFC l
MFC l
à
à
g
g
ì
ì
?
?


M
M



t s
t s


t
t
í
í
nh năng c
nh năng c


a MFC qua t
a MFC qua t


ng version
ng version


C
C
á
á
c th
c th
à
à
nh ph

nh ph


n c
n c


a 1
a 1


ng d
ng d


ng trong VC++
ng trong VC++
Gi
Gi


i thi
i thi


u v
u v


MFC

MFC
MFC l
MFC l
à
à
g
g
ì
ì
?
?


L
L
à
à
m
m


t thư vi
t thư vi


n c
n c
á
á
c l

c l


p hư
p hư


ng đ
ng đ


i tư
i tư


ng d
ng d
ù
ù
ng cho vi
ng cho vi


c l
c l


p tr
p tr
ì

ì
nh trên
nh trên
Windows.
Windows.


Đư
Đư


c xây d
c xây d


ng trên cơ s
ng trên cơ s


c
c
á
á
c h
c h
à
à
m thư vi
m thư vi



n API c
n API c


a Windows
a Windows


Version 6 c
Version 6 c
ó
ó
kho
kho


ng 200 l
ng 200 l


p
p


Gi
Gi
ú
ú
p cho ngư

p cho ngư


i l
i l


p tr
p tr
ì
ì
nh c
nh c
ó
ó
th
th


xây d
xây d


ng
ng


ng d
ng d



ng nhanh v
ng nhanh v
à
à
í
í
t t
t t


n
n
công s
công s


c hơn so v
c hơn so v


i vi
i vi


c s
c s


d

d


ng đơn thu
ng đơn thu


n c
n c
á
á
c h
c h
à
à
m thư vi
m thư vi


n API
n API
c
c


a Windows
a Windows


Ta v

Ta v


n c
n c
ó
ó
th
th


g
g


i c
i c
á
á
c h
c h
à
à
m Windows API trong c
m Windows API trong c
á
á
c
c



ng d
ng d


ng MFC
ng MFC
3
Gi
Gi


i thi
i thi


u v
u v


MFC
MFC
MFC l
MFC l
à
à
g
g
ì
ì

?
?


Trong 1
Trong 1


ng d
ng d


ng MFC,
ng MFC,
ta thư
ta thư


ng không g
ng không g


i h
i h
à
à
m
m
Windows API tr
Windows API tr



c ti
c ti
ế
ế
p, m
p, m
à
à
s
s


t
t


o c
o c
á
á
c đ
c đ


i tư
i tư



ng t
ng t


nh
nh


ng
ng
l
l


p c
p c


a MFC, v
a MFC, v
à
à
g
g


i phương th
i phương th



c c
c c


a đ
a đ


i tư
i tư


ng đ
ng đ
ó
ó


Đa s
Đa s


c
c
á
á
c phương th
c phương th



c c
c c


a nh
a nh


ng l
ng l


p MFC c
p MFC c
ó
ó
c
c
ù
ù
ng tên
ng tên
v
v


i nh
i nh



ng h
ng h
à
à
m Windows API
m Windows API


MFC t
MFC t


o ra m
o ra m


t Application Framework, gi
t Application Framework, gi
ú
ú
p:
p:
– Thiết lập kiến trúc của ứng dụng một cách nhất quán và khoa
học
– Che dấu đi nhiều phần chi tiết mà Windows API đòi hỏi, giúp
lập trình viên “thảnh thơi” hơn
Gi
Gi



i thi
i thi


u v
u v


MFC
MFC
M
M


t s
t s


t
t
í
í
nh năng c
nh năng c


a MFC
a MFC



Version 1:
Version 1:
– Các lớp List, Array, String, Time, Date, File access,…
– Các lớp giao diện cơ bản
– MDI, OLE 1.0


Version 2:
Version 2:
– File open, save
– Print preview, printing
– Scrolling window, Splitter window
– Toolbar, Statusbar
– Truy xuất được đến các control của VB
– Trợ giúp theo ngữ cảnh (Context-sensitive help)
– DLL
4
Gi
Gi


i thi
i thi


u v
u v


MFC

MFC
M
M


t s
t s


t
t
í
í
nh năng c
nh năng c


a MFC
a MFC


Version 2.5:
Version 2.5:
– Hỗ trợ ODBC (Open Database Connectivity), cho phép truy
xuất đến các CSDL Access, FoxPro, SQL Server,…
– OLE 2.01


Version 3:
Version 3:

– Hỗ trợ tab dialog (property sheet)
– Docking control bar


Version 3.1:
Version 3.1:
– Hỗ trợ các control chuẩn của Windows 95
– ODBC level 2 with Access Jet database engine
– Các lớp Winsock phục vụ lập trình TCP/IP
Gi
Gi


i thi
i thi


u v
u v


MFC
MFC
M
M


t s
t s



t
t
í
í
nh năng c
nh năng c


a MFC
a MFC


Version 4.0:
Version 4.0:
– ADO (Data Access Object)
– Windows 95 docking control bar
– Bổ sung thêm lớp TreeView và RichEdit
– Các lớp đồng bộ hoá các tiểu trình


Version 4.2:
Version 4.2:
– Các lớp WinInet
– Các lớp ActiveX document server
– Các tính năng mở rộng của ActiveX control
– Tăng cường một số khả năng của ODBC
5
Gi
Gi



i thi
i thi


u v
u v


MFC
MFC
M
M


t s
t s


t
t
í
í
nh năng c
nh năng c


a MFC
a MFC



Version 6:
Version 6:
– Hỗ trợ các lớp cho những control chuẩn trong IE
4.0
– Hỗ trợ Dynamic HTML, cho phép tạo lập động các
trang HTML
– Active Document Containment, cho phép ứng dụng
MFC có thể chứa các Active Document
– OLE DB và ADO
Gi
Gi


i thi
i thi


u
u
C
C
á
á
c th
c th
à
à
nh ph

nh ph


n c
n c


a 1
a 1


ng d
ng d


ng
ng
6
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên



T
T


o
o


ng d
ng d


ng b
ng b


ng c
ng c
á
á
ch s
ch s


d
d


ng MFC
ng MFC

AppWizard
AppWizard


C
C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh
Chương tr
Chương tr
ì
ì

nh MFC đ
nh MFC đ


u tiên
u tiên
T
T


o
o


ng d
ng d


ng b
ng b


ng MFC AppWizard
ng MFC AppWizard
Visual Studio 6.0
7
Chương tr
Chương tr
ì
ì

nh MFC đ
nh MFC đ


u tiên
u tiên
T
T


o
o


ng d
ng d


ng b
ng b


ng MFC AppWizard
ng MFC AppWizard
Visual Studio 2005
Chương tr
Chương tr
ì
ì
nh MFC đ

nh MFC đ


u tiên
u tiên
T
T


o
o


ng d
ng d


ng b
ng b


ng MFC AppWizard
ng MFC AppWizard
Visual Studio 6.0
8
Chương tr
Chương tr
ì
ì
nh MFC đ

nh MFC đ


u tiên
u tiên
T
T


o
o


ng d
ng d


ng b
ng b


ng MFC AppWizard
ng MFC AppWizard
Visual Studio 2005
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ



u tiên
u tiên
C
C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh


C
C

á
á
c file chương tr
c file chương tr
ì
ì
nh: (xxx l
nh: (xxx l
à
à
tên project)
tên project)
– xxx.h: header file của file xxx.cpp, chứa khai báo lớp CxxxApp để
quản lý toàn bộứng dụng. Lớp CxxxApp kế thừa từ lớp CWinApp
của MFC
– xxxDlg.h: header file của file xxxDlg.cpp, chứa khai báo lớp
CxxxDlg để quản lý cửa sổ Dialog giao diện của ứng dụng. Lớp
CxxxDlg kế thừa từ lớp CDialog của MFC
– Resource.h: header file, chứa các hằng ID của các resource được
định nghĩa trong file xxx.rc
– xxxDlg.cpp: cài đặt các hàm thành phần của lớp CxxxDlg
– xxx.cpp: cài đặt các hàm thành phần của lớp CxxxApp
– xxx.rc: mô tả các resource (tài nguyên) của ứng dụng
9
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ



u tiên
u tiên
C
C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh
Visual Studio 6.0 Visual Studio 2005
Chương tr
Chương tr
ì

ì
nh MFC đ
nh MFC đ


u tiên
u tiên
C
C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh



CWinApp: l
CWinApp: l


p ch
p ch
í
í
nh c
nh c


a MFC đ
a MFC đ


qu
qu


n lý
n lý


ng d
ng d


ng. Ch

ng. Ch


a đ
a đ


ng vòng l
ng vòng l


p
p
nh
nh


n message v
n message v
à
à
phân ph
phân ph


i message đ
i message đ
ế
ế
n c

n c
á
á
c c
c c


a s
a s


c
c


a
a


ng d
ng d


ng
ng


CDemoApp: l
CDemoApp: l



p k
p k
ế
ế
th
th


a t
a t


l
l


p CWinApp.
p CWinApp.
class CMFC01App : public CWinApp
class CMFC01App : public CWinApp
{
{
public:
public:
CMFC01App();
CMFC01App();
// Overrides
// Overrides
public:

public:
virtual BOOL InitInstance();
virtual BOOL InitInstance();
// Implementation
// Implementation
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
};
};
10
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên
C
C
á
á
c th
c th
à
à
nh ph
nh ph



n c
n c


a chương tr
a chương tr
ì
ì
nh
nh


InitInstance(): h
InitInstance(): h
à
à
m kh
m kh


i t
i t


o
o



ng d
ng d


ng, override lên h
ng, override lên h
à
à
m chu
m chu


n c
n c


a l
a l


p
p
CWinApp
CWinApp
BOOL
BOOL
CxxxApp
CxxxApp
::
::

InitInstance
InitInstance
()
()
{
{
CDemoDlg dlg;
CDemoDlg dlg;
m_pMainWnd = &dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
if (nResponse == IDOK)
{
{
// TODO: Place code here to handle when the dialog is dismissed
// TODO: Place code here to handle when the dialog is dismissed
with OK
with OK
}
}
else if (nResponse == IDCANCEL)
else if (nResponse == IDCANCEL)
{
{
}
}
// Since the dialog has been closed, return FALSE so that we exi
// Since the dialog has been closed, return FALSE so that we exi

t the
t the
// application, rather than start the application's message pum
// application, rather than start the application's message pum
p.
p.
return FALSE
return FALSE
;
;
}
}
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên
C
C
á
á
c th
c th
à
à

nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh


CWnd: l
CWnd: l


p ch
p ch
í
í
nh c
nh c


a MFC đ
a MFC đ



qu
qu


n lý c
n lý c
á
á
c lo
c lo


i c
i c


a
a
s
s


giao di
giao di


n. C
n. C

ó
ó
nhi
nhi


u l
u l


p đư
p đư


c k
c k
ế
ế
th
th


a t
a t


l
l



p
p
n
n
à
à
y đ
y đ


qu
qu


n lý c
n lý c
á
á
c lo
c lo


i c
i c


a s
a s



kh
kh
á
á
c nhau
c nhau
(CTreeCtrl, CListBox, CEdit,
(CTreeCtrl, CListBox, CEdit,


)
)


CDialog k
CDialog k
ế
ế
th
th


a t
a t


l
l



p CWnd, l
p CWnd, l
à
à
l
l


p cơ b
p cơ b


n đư
n đư


c
c
d
d
ù
ù
ng đ
ng đ


hi
hi



n th
n th


c
c
á
á
c dialog trên m
c dialog trên m
à
à
n h
n h
ì
ì
nh.
nh.
11
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên
C

C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh


M
M


i dialog s
i dialog s



c
c
ó
ó
tương
tương


ng m
ng m


t l
t l


p CxxxDlg k
p CxxxDlg k
ế
ế
th
th


a t
a t


CDialog.

CDialog.
class
class
CMFC01Dlg
CMFC01Dlg
: public
: public
CDialog
CDialog
{
{
// Construction
// Construction
public:
public:
CMFC01Dlg(CWnd* pParent = NULL);
CMFC01Dlg(CWnd* pParent = NULL);
// standard constructor
// standard constructor
// Dialog Data
// Dialog Data
enum { IDD = IDD_MFC01_DIALOG };
enum { IDD = IDD_MFC01_DIALOG };
protected:
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV support
// DDX/DDV support
// Implementation

// Implementation
protected:
protected:
HICON m_hIcon;
HICON m_hIcon;
// Generated message map functions
// Generated message map functions
virtual BOOL OnInitDialog();
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
DECLARE_MESSAGE_MAP()
};
};
Chương tr
Chương tr
ì
ì
nh MFC đ
nh MFC đ


u tiên
u tiên
C

C
á
á
c th
c th
à
à
nh ph
nh ph


n c
n c


a chương tr
a chương tr
ì
ì
nh
nh


M
M


t s
t s



h
h
à
à
m c
m c


a l
a l


p CDemoDlg:
p CDemoDlg:
– OnInitDialog:
•Khởi tạo các giá trị cần thiết cho dialog, được gọi khi dialog
sắp được hiển thị.
•Hàm xử lý cho thông điệp WM_INITDIALOG
– OnPaint:
• Được gọi khi cần cập nhật nội dung cho dialog (vẽ lại màn
hình).
•Hàm xử lý cho thông điệp WM_PAINT.
12
Message Map
Message Map


L
L

à
à
m sao đ
m sao đ


x
x




1 t
1 t
hông đi
hông đi


p ?
p ?
– MFC dùng Message Map để liên kết các thông điệp
với những hàm thành phần của lớp cửa sổ.
Message Map
Message Map


M
M



i thông đi
i thông đi


p s
p s


đư
đư


c x
c x


lý b
lý b


i 1 h
i 1 h
à
à
m th
m th
à
à
nh ph
nh ph



n
n
tương
tương


ng
ng
BEGIN_MESSAGE_MAP(CMFC01Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


ON_WM_PAINT l
ON_WM_PAINT l
à
à
1
1
macro đư
macro đư


c đ
c đ



nh ngh
nh ngh
ĩ
ĩ
a trong
a trong
Afxmsg_.h, m
Afxmsg_.h, m


c nhiên liên k
c nhiên liên k
ế
ế
t thông đi
t thông đi


p WM_PAINT v
p WM_PAINT v


i
i
h
h
à
à

m OnPaint
m OnPaint
13
X
X


lý thông đi
lý thông đi


p
p


Thêm x
Thêm x


lý thông đi
lý thông đi


p WM_LBUTTONDOWN
p WM_LBUTTONDOWN
– Bổ sung thêm khai báo hàm xử lý thông điệp
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
– Bổ sung 1 macro trong khai báo message map
ON_WM_LBUTTONDOWN()
– Viết hàm thực thi OnLButtonDown

void CMFC01Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
MessageBox(_T("Nhan phim trai chuoi"), _T("Thong bao"), MB_OK);
CDialog::OnLButtonDown(nFlags, point);
}
X
X


lý thông đi
lý thông đi


p
p


S
S


d
d


ng ClassWizard
ng ClassWizard
(Ctrl
(Ctrl

-
-
W)
W)


Click chu
Click chu


t ph
t ph


i, ch
i, ch


n
n
ClassWizard
ClassWizard
Visual Studio 6.0
14
X
X


lý thông đi
lý thông đi



p
p


Ch
Ch


n ph
n ph


n
n
Messages
Messages
trong h
trong h


p tho
p tho


i
i
Properties
Properties

.
.


Ch
Ch


n đ
n đ
ú
ú
ng thông đi
ng thông đi


p c
p c


n
n
x
x


lý.
lý.
Visual Studio 2005
X

X


lý mouse v
lý mouse v
à
à
keyboard
keyboard


X
X


lý mouse
lý mouse
– Thông điệp của mouse
– Ví dụ: Vẽ hình bằng mouse


X
X


lý keyboard
lý keyboard
– Thông điệp của keyboard
15
X

X


lý mouse
lý mouse
C
C
á
á
c thông đi
c thông đi


p c
p c


a mouse
a mouse


WM_LBUTTONDOWN
WM_LBUTTONDOWN


WM_LBUTTONUP
WM_LBUTTONUP


WM_LBUTTONDBLCLK

WM_LBUTTONDBLCLK


WM_RBUTTONDOWN
WM_RBUTTONDOWN


WM_RBUTTONUP
WM_RBUTTONUP


WM_RBUTTONDBLCLK
WM_RBUTTONDBLCLK


WM_MOUSEMOVE
WM_MOUSEMOVE


WM_MOUSEWHEEL
WM_MOUSEWHEEL
X
X


lý mouse
lý mouse
C
C
á

á
c thông đi
c thông đi


p c
p c


a mouse
a mouse


V
V


i m
i m


i thông đi
i thông đi


p c
p c


a chu

a chu


t, Windows g
t, Windows g


i k
i k
è
è
m 2
m 2
tham s
tham s


wParam v
wParam v
à
à
lParam
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
16
X

X


lý mouse
lý mouse
C
C
á
á
c thông đi
c thông đi


p c
p c


a mouse
a mouse
OnMouseMove
OnMouseMove
ON_WM_MOUSEMOVE
ON_WM_MOUSEMOVE
WM_MOUSEMOVE
WM_MOUSEMOVE
OnRButtonDblClk
OnRButtonDblClk
ON_WM_RBUTTONDBLCLK
ON_WM_RBUTTONDBLCLK
WM_RBUTTONDBLCLK

WM_RBUTTONDBLCLK
OnRButtonUp
OnRButtonUp
ON_WM_RBUTTONUP
ON_WM_RBUTTONUP
WM_RBUTTONUP
WM_RBUTTONUP
OnRButtonDown
OnRButtonDown
ON_WM_RBUTTONDOWN
ON_WM_RBUTTONDOWN
WM_RBUTTONDOWN
WM_RBUTTONDOWN
OnMButtonDblClk
OnMButtonDblClk
ON_WM_MBUTTONDBLCLK
ON_WM_MBUTTONDBLCLK
WM_MBUTTONDBLCLK
WM_MBUTTONDBLCLK
OnMButtonUp
OnMButtonUp
ON_WM_MBUTTONUP
ON_WM_MBUTTONUP
WM_MBUTTONUP
WM_MBUTTONUP
OnMButtonDown
OnMButtonDown
ON_WM_MBUTTONDOWN
ON_WM_MBUTTONDOWN
WM_MBUTTONDOWN

WM_MBUTTONDOWN
OnLButtonDblClk
OnLButtonDblClk
ON_WM_LBUTTONDBLCLK
ON_WM_LBUTTONDBLCLK
WM_LBUTTONDBLCLK
WM_LBUTTONDBLCLK
OnLButtonUp
OnLButtonUp
ON_WM_LBUTTONUP
ON_WM_LBUTTONUP
WM_LBUTTONUP
WM_LBUTTONUP
OnLButtonDown
OnLButtonDown
ON_WM_LBUTTONDOWN
ON_WM_LBUTTONDOWN
WM_LBUTTONDOWN
WM_LBUTTONDOWN
H
H
à
à
m x
m x


lý thông đi
lý thông đi



p
p
Message
Message
-
-
Map Macro
Map Macro
Thông đi
Thông đi


p
p
X
X


lý mouse
lý mouse
C
C
á
á
c thông đi
c thông đi


p c

p c


a mouse
a mouse


C
C
á
á
c h
c h
à
à
m x
m x


lý thông đi
lý thông đi


p cho mouse c
p cho mouse c
ó
ó
d
d



ng:
ng:
afx_msg void On
afx_msg void On
MsgName
MsgName
(UINT nFlags, CPoint
(UINT nFlags, CPoint
point)
point)
– point: thuộc lớp CPoint, chỉ vị trí của trỏ chuột. Gốc
toạ độ được xác định theo góc trái trên của cửa sổ
– nFlags: trạng thái của các phím chuột và các phím
Ctrl, Alt.
17
X
X


lý mouse
lý mouse
C
C
á
á
c thông đi
c thông đi



p c
p c


a mouse
a mouse


S
S


d
d


ng ph
ng ph
é
é
p to
p to
á
á
n
n
&
&
đ
đ



ki
ki


m tra m
m tra m


t tr
t tr


ng th
ng th
á
á
i
i
c
c
ó
ó
t
t


n t
n t



i không
i không
– Ví dụ: nFlags & MK_CONTROL khác 0 kiểm tra phím
Ctrl được nhấn
Ph
Ph
í
í
m Shift đư
m Shift đư


c nh
c nh


n
n
MK_SHIFT
MK_SHIFT
Ph
Ph
í
í
m Ctrl đư
m Ctrl đư



c nh
c nh


n
n
MK_CONTROL
MK_CONTROL
Ph
Ph
í
í
m ph
m ph


i chu
i chu


t đư
t đư


c nh
c nh


n
n

MK_RBUTTON
MK_RBUTTON
Ph
Ph
í
í
m gi
m gi


a chu
a chu


t đư
t đư


c nh
c nh


n
n
MK_MBUTTON
MK_MBUTTON
Ph
Ph
í
í

m tr
m tr
á
á
i chu
i chu


t
đư
t đư


c nh
c nh


n
n
MK_LBUTTON
MK_LBUTTON
Ý ngh
Ý ngh
ĩ
ĩ
a
a
Gi
Gi
á

á
tr
tr


X
X


lý mouse
lý mouse
V
V
í
í
d
d


minh h
minh h


a
a


V
V
í

í
d
d


: V
: V


h
h
ì
ì
nh b
nh b


ng mouse
ng mouse


Mô t
Mô t


: k
: k
hi ngư
hi ngư



i s
i s


d
d


ng nh
ng nh


n gi
n gi


n
n
ú
ú
t tr
t tr
á
á
i chu
i chu


t & di

t & di
chuy
chuy


n v
n v


1
1
đư
đư


ng th
ng th


ng
ng
18
X
X


lý mouse
lý mouse
V
V

í
í
d
d


minh h
minh h


a
a


C
C
á
á
c x
c x


lý c
lý c


n thi
n thi
ế
ế

t:
t:
– WM_LBUTTONDOWN : OnLButtonDown
– WM_MOUSEMOVE : OnMouseMove


C
C
á
á
c bư
c bư


c th
c th


c hi
c hi


n:
n:
– Định nghĩa 2 biến m_PrevX, m_PrevY trong class CxxxDlg
– Định nghĩa hàm xử lý message WM_LBUTTONDOWN trong
class CxxxDlg
– Định nghĩa hàm xử lý message WM_MOUSEMOVE trong
class CxxxDlg
X

X


lý mouse
lý mouse
V
V
í
í
d
d


minh h
minh h


a
a


Vi
Vi
ế
ế
t code cho h
t code cho h
à
à
m x

m x


lý thông đi
lý thông đi


p nh
p nh


n tr
n tr
á
á
i chu
i chu


t
t
void CMouseProcessingDlg::OnLButtonDown(UINT nFlags,
CPoint point)
{
// TODO: Add your message handler code here and/or
// call default
m_PrevX = point.x;
m_PrevY = point.y;
CDialog::OnLButtonDown(nFlags, point);
}

19
X
X


lý mouse
lý mouse
V
V
í
í
d
d


minh h
minh h


a
a
void CMouseProcessingDlg::OnMouseMove(UINT nFlags, CPoint point)
void CMouseProcessingDlg::OnMouseMove(UINT nFlags, CPoint point)
{
{
// TODO: Add your message handler code here and/or call default
// TODO: Add your message handler code here and/or call default
//Chu
//Chu



t đang di chuy
t đang di chuy


n v
n v


i ph
i ph
í
í
m tr
m tr
á
á
i đang nh
i đang nh


n
n
if ((nFlags & MK_LBUTTON) == MK_LBUTTON) {
if ((nFlags & MK_LBUTTON) == MK_LBUTTON) {
// L
// L


y ng

y ng


c
c


nh thi
nh thi
ế
ế
t b
t b


đ
đ


v
v


CClientDC dc(this);
CClientDC dc(this);
// V
// V


m

m


t đư
t đư


ng th
ng th


ng t
ng t


đi

đi


m trư
m trư


c đ
c đ
ó
ó
đ
đ

ế
ế
n đi
n đi


m hi
m hi


n t
n t


i
i
dc.MoveTo(m_PrevX, m_PrevY);
dc.MoveTo(m_PrevX, m_PrevY);
dc.LineTo(point.x, point.y);
dc.LineTo(point.x, point.y);
//
//
Lưu đi
Lưu đi


m hi
m hi



n t
n t


i l
i l


i
i
m_PrevX = point.x;
m_PrevX = point.x;
m_PrevY = point.y;
m_PrevY = point.y;
}
}
CDialog::OnMouseMove(nFlags, point);
CDialog::OnMouseMove(nFlags, point);
}
}
X
X


lý mouse
lý mouse
V
V
í
í

d
d


minh h
minh h


a
a


Biên d
Biên d


ch v
ch v
à
à
ch
ch


y th
y th


20
X

X


lý keyboard
lý keyboard


Thông đi
Thông đi


p c
p c


a keyboard
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
•Hàm xử lý tương ứng: CWnd::OnKeyDown, CWnd::OnKeyUp
• 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
•Hàm xử lý tương ứng: CWnd::OnChar
• 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,…)
X

X


lý keyboard
lý keyboard


C
C
á
á
c h
c h
à
à
m x
m x


lý thông đi
lý thông đi


p liên quan đ
p liên quan đ
ế
ế
n b
n b
à

à
n ph
n ph
í
í
m
m
c
c
ó
ó
d
d


ng:
ng:
afx_msg void On
afx_msg void On
MsgName
MsgName
(UINT nChar, UINT
(UINT nChar, UINT
nRepCnt, UINT nFlags)
nRepCnt, UINT nFlags)
– nChar: mã phím ảo được nhấn hoặc thả
– nRepCnt: số lần nhấn/thả phím tương ứng
– nFlags: cờ liên quan (xem thêm trong MSDN)
21
X

X


lý keyboard
lý keyboard


Mã ph
Mã ph
í
í
m
m


o
o
Esc
Esc
VK_ESCAPE
VK_ESCAPE
Pause
Pause
VK_PAUSE
VK_PAUSE
Alt
Alt
VK_MENU
VK_MENU
Ctrl

Ctrl
VK_CONTROL
VK_CONTROL
Shift
Shift
VK_SHIFT
VK_SHIFT
Ph
Ph
í
í
m s
m s


5 (Num Lock t
5 (Num Lock t


t)
t)
VK_CLEAR
VK_CLEAR
Tab
Tab
VK_TAB
VK_TAB
Backspace
Backspace
VK_BACK

VK_BACK
Enter
Enter
VK_RETURN
VK_RETURN
Ctrl
Ctrl
-
-
Break
Break
VK_CANCEL
VK_CANCEL
Ph
Ph
í
í
m s
m s


0
0
,..,
,..,
9 (
9 (
Numlock đư
Numlock đư



c b
c b


t)
t)
VK_NUMPAD0,
VK_NUMPAD0,


,VK_NUMPAD9
,VK_NUMPAD9
Ph
Ph
í
í
m ch
m ch


c năng F
c năng F
1_F12
1_F12
VK_F1,
VK_F1,


,VK_F12

,VK_F12
Ph
Ph
í
í
m tương
m tương


ng
ng
Mã ph
Mã ph
í
í
m
m


o
o
X
X


lý keyboard
lý keyboard


Mã ph

Mã ph
í
í
m
m


o
o
Delete v
Delete v
à
à
Del
Del
VK_DELETE
VK_DELETE
Insert v
Insert v
à
à
Ins
Ins
VK_INSERT
VK_INSERT
Print Screen
Print Screen
VK_SNAPSHOT
VK_SNAPSHOT
Down arrow

Down arrow
VK_DOWN
VK_DOWN
Right arrow
Right arrow
VK_RIGHT
VK_RIGHT
Up arrow
Up arrow
VK_UP
VK_UP
Left arrow
Left arrow
VK_LEFT
VK_LEFT
Home
Home
VK_HOME
VK_HOME
End
End
VK_END
VK_END
Page Down v
Page Down v
à
à
PgDn
PgDn
VK_NEXT

VK_NEXT
Page Up v
Page Up v
à
à
PgUp
PgUp
VK_PRIOR
VK_PRIOR
Spacebar
Spacebar
VK_SPACE
VK_SPACE
Ph
Ph
í
í
m tương
m tương


ng
ng
Mã ph
Mã ph
í
í
m
m



o
o
22
X
X


lý keyboard
lý keyboard


Mã ph
Mã ph
í
í
m
m


o
o
Ph
Ph
í
í
m Menu
m Menu
VK_APPS
VK_APPS

Ph
Ph
í
í
m Windows (ph
m Windows (ph


i)
i)
VK_RWIN
VK_RWIN
Ph
Ph
í
í
m Windows (tr
m Windows (tr
á
á
i)
i)
VK_LWIN
VK_LWIN
Scroll Lock
Scroll Lock
VK_SCROLL
VK_SCROLL
Num Lock
Num Lock

VK_NUMLOCK
VK_NUMLOCK
Caps Lock
Caps Lock
VK_CAPITAL
VK_CAPITAL
Ph
Ph
í
í
m / (bên ph
m / (bên ph


i)
i)
VK_DIVIDE
VK_DIVIDE
Ph
Ph
í
í
m . (bên ph
m . (bên ph


i)
i)
VK_DECIMAL
VK_DECIMAL

Ph
Ph
í
í
m
m


(bên ph
(bên ph


i)
i)
VK_SUBTRACT
VK_SUBTRACT
Ph
Ph
í
í
m + (bên ph
m + (bên ph


i)
i)
VK_ADD
VK_ADD
Ph
Ph

í
í
m * (bên ph
m * (bên ph


i)
i)
VK_MULTIPLY
VK_MULTIPLY
Ph
Ph
í
í
m tương
m tương


ng
ng
Mã ph
Mã ph
í
í
m
m


o
o

X
X


lý keyboard
lý keyboard


C
C
á
á
c ph
c ph
í
í
m A
m A
-
-
Z, a
Z, a
-
-
z, 0
z, 0
-
-
9 c
9 c

ó
ó
mã ph
mã ph
í
í
m
m


o mang gi
o mang gi
á
á
tr
tr


ANSI c
ANSI c


a ph
a ph
í
í
m.
m.
– 0x41 – 0x5A : A-Z
– 0x61 – 0x7A : a-z

– 0x30 – 0x39 : 0-9
23
X
X


lý keyboard
lý keyboard


L
L


y tr
y tr


ng th
ng th
á
á
i c
i c
á
á
c ph
c ph
í
í

m Ctrl, Shift, Num Lock, CapsLock,
m Ctrl, Shift, Num Lock, CapsLock,
Scroll Lock
Scroll Lock
– Các trạng thái này không được gửi kèm với thông điệp bàn
phím
– Sử dụng hàm ::GetKeyState để lấy trạng thái
– Ví dụ:
• ::GetKeyState (VK_SHIFT)
• ::GetKeyState (VK_CONTROL)
• if ((nChar == VK_LEFT) && (::GetKeyState (VK_CONTROL) < 0))
{
}
• ::GetKeyState (VK_NUMLOCK) & 0x01
M
M


t s
t s


l
l


p thư
p thư



ng g
ng g


p
p


L
L


p CWnd
p CWnd


L
L


p CString
p CString
24
L
L


p CWnd
p CWnd
Gi

Gi


i thi
i thi


u
u


Đây l
Đây l
à
à
m
m


t l
t l


p t
p t


ng qu
ng qu
á

á
t v
t v
à
à
g
g


p r
p r


t nhi
t nhi


u l
u l


n
n
trong qu
trong qu
á
á
tr
tr
ì

ì
nh l
nh l
à
à
m vi
m vi


c trên dialog n
c trên dialog n
ó
ó
i riêng v
i riêng v
à
à
trên c
trên c
á
á
c
c


ng d
ng d


ng MFC n

ng MFC n
ó
ó
i chung.
i chung.


L
L


p CWnd cung c
p CWnd cung c


p c
p c
á
á
c ch
c ch


c năng cơ b
c năng cơ b


n cho
n cho
t

t


t c
t c


c
c
á
á
c l
c l


p c
p c


a s
a s


(c
(c
á
á
c control, mainframe,
c control, mainframe,
view, dialog

view, dialog


) t
) t
rong thư vi
rong thư vi


n MFC.
n MFC.
L
L


p CWnd
p CWnd
C
C
á
á
c h
c h
à
à
m cơ b
m cơ b


n c

n c


a l
a l


p CWnd
p CWnd


GetDlgItem
GetDlgItem


EnableWindow
EnableWindow


GetFocus
GetFocus


SetFocus
SetFocus


GetClientRect
GetClientRect



MoveWindow
MoveWindow


GetDlgCtrlID
GetDlgCtrlID


GetDlgItemInt
GetDlgItemInt


GetDlgItemText
GetDlgItemText


SetDlgItemText
SetDlgItemText


GetWindowText
GetWindowText


SetWindowText
SetWindowText
25
C
C

á
á
c h
c h
à
à
m cơ b
m cơ b


n c
n c


a l
a l


p CWnd
p CWnd
H
H
à
à
m CWnd::GetDlgItem
m CWnd::GetDlgItem


CWnd*
CWnd*

GetDlgItem
GetDlgItem
(int nID ) const;
(int nID ) const;
– Trả về con trỏ CWnd* của một cửa sổ con trên 1
dialog.
– Ví dụ :
CWnd *pWnd;
pWnd = this->GetDlgItem(IDC_EDIT1);
C
C
á
á
c h
c h
à
à
m cơ b
m cơ b


n c
n c


a l
a l


p CWnd

p CWnd
H
H
à
à
m CWnd::EnableWindow
m CWnd::EnableWindow
BOOL EnableWindow(BOOL bEnable = TRUE );
BOOL EnableWindow(BOOL bEnable = TRUE );
– Làm cho cửa sổ có thể/không thể bị tác động bởi
chuột/bàn phím
– Ví dụ:
CWnd* pWnd = this->GetDlgItem(edt1);
pWnd->EnableWindow(FALSE);
pWnd = this->GetDlgItem(stc3);
pWnd->EnableWindow(TRUE);

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×