L?P TR - PowerPoint PPT Presentation

1 / 61
About This Presentation
Title:

L?P TR

Description:

Title: Fast Start: SQL and ADO.Net Author: Aaron Brethorst Created Date: 3/25/2003 11:57:48 PM Document presentation format: On-screen Show (4:3) Company – PowerPoint PPT presentation

Number of Views:113
Avg rating:3.0/5.0
Slides: 62
Provided by: AaronBr3
Category:

less

Transcript and Presenter's Notes

Title: L?P TR


1
L?P TRÌNH WINDOWS
  • Gi?i thi?u v? MFC, Visual C 6.0

2
N?i dung
Gi?i thi?u v? MFC Chuong trình MFC d?u
tiên X? lý chu?t và bàn phím Message Box
3
N?i dung
Gi?i thi?u v? MFC Chuong trình MFC d?u
tiên X? lý chu?t và bàn phím Message Box
4
Gi?i thi?u v? MFC
Microsoft Foundation Class là m?t thu vi?n
các l?p (class, OOP) trong ngôn ng? Visual C,
du?c s? d?ng d? xây d?ng các ?ng d?ng trên
Windows Ðu?c xây d?ng trên co s? các hàm thu
vi?n API c?a Windows Version 6 có kho?ng 200
class Giúp cho ngu?i l?p trình có th? xây
d?ng ?ng d?ng nhanh và ít t?n công s?c hon so v?i
vi?c s? d?ng don thu?n các hàm thu vi?n API c?a
Windows Trong m?t ?ng d?ng MFC, ta s? không
g?i tr?c ti?p các hàm Windows API mà s? t?o các
object t? nh?ng l?p c?a MFC, sau dó g?i các hàm
c?a object này Ta v?n có th? g?i các hàm
Windows API trong MFC
5
Gi?i thi?u v? MFC
Ða s? các phuong th?c c?a MFC class có cùng
tên v?i nh?ng hàm Windows API MFC t?o ra m?t
Application Framework, giú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 di nhi?u ph?n chi ti?t mà Windows
API dòi h?i, giúp developer th?nh thoi hon
6
Các thành ph?n trong ?ng d?ng Visual C
7
Chuong trình MFC d?u tiên
?? ?ng d?ng don gi?n dùng Application
Framework ?? ?ng d?ng ph?c t?p hon (Dialog-based
App)
8
Chuong trình MFC d?u tiên
?ng d?ng don gi?n
?? T?o ?ng d?ng ?? Các thành ph?n c?a chuong trình
9
Chuong trình MFC d?u tiên
t?o ?ng d?ng
?? Ch?n menu File ? New ?? Ch?n tab Projects ??
Ch?n lo?i project Win32 Application ?? Ð?t tên
project và xác d?nh du?ng d?n thu m?c trong ô

Location ?? Ch?n lo?i ?ng
d?ng An empty project ??Nh?n Finish d? k?t thúc
10
Chuong trình MFC d?u tiên
t?o ?ng d?ng
  • ?? Add các file Hello.h và Hello.cpp vào project
  • ?? Ch?n menu Project ? Settings
  • Ch?n project trong c?a s? bên trái
  • Ch?n tab General
  • Ch?n Use MFC In A Shared DLL

11
Chuong trình MFC d?u tiên
Hello.h
class CMyApp public CWinApp public virtual
BOOL InitInstance () class CMainWindow
public CFrameWnd public CMainWindow
() protected afx_msg void OnPaint
() DECLARE_MESSAGE_MAP ()
12
Chuong trình MFC d?u tiên
Hello.cpp
include ltafxwin.hgt include "Hello.h" CMyApp
myApp ///////////////////////////////////////////
/////////////// // CMyApp member functions BOOL
CMyAppInitInstance () m_pMainWnd new
CMainWindow m_pMainWnd-gtShowWindow
(m_nCmdShow) m_pMainWnd-gtUpdateWindow () return
TRUE //////////////////////////////////////////
////////////////
13
Chuong trình MFC d?u tiên
Hello.cpp(tt)
// CMainWindow message map and member
functions BEGIN_MESSAGE_MAP (CMainWindow,
CFrameWnd) ON_WM_PAINT () END_MESSAGE_MAP
() CMainWindowCMainWindow () Create (NULL,
_T ("The Hello Application")) void
CMainWindowOnPaint () CPaintDC dc
(this) CRect rect GetClientRect
(rect) dc.DrawText (_T ("Hello, MFC"), -1,
rect, DT_SINGLELINE
DT_CENTER DT_VCENTER)
14
Chuong trình MFC d?u tiên
k?t qu?
15
Chuong trình MFC d?u tiên
các class c?a ?ng d?ng
16
Chuong trình MFC d?u tiên
các thành ph?n
  • CWinApp l?p chính c?a MFC d? qu?n lý ?ng d?ng.
    Ch?a d?ng vòng l?p nh?n message và phân ph?i
    message d?n các c?a s? c?a ?ng d?ng
  • CMyApp l?p k? th?a t? l?p CWinApp
  • class CMyApp public CWinApp
  • public
  • virtual BOOL InitInstance ()

17
Chuong trình MFC d?u tiên
các thành ph?n
  • InitInstance() hàm kh?i t?o ?ng d?ng, override
    lên hàm chu?n c?a l?p CWinApp
  • BOOL CMyAppInitInstance ()
  • m_pMainWnd new CMainWindow
  • m_pMainWnd-gtShowWindow (m_nCmdShow)
  • m_pMainWnd-gtUpdateWindow ()
  • return TRUE

18
Chuong trình MFC d?u tiên
các thành ph?n
  • CWnd l?p chính c?a MFC d? qu?n lý các lo?i c?a
    s? giao di?n. Có nhi?u l?p du?c k? th?a t? l?p
    này d? qu?n lý các lo?i c?a s? khác nhau
    (CTreeCtrl, CListBox, Cedit,)
  • CFrameWnd l?p k? th?a t? l?p CWnd, d? qu?n lý
    c?a s? giao di?n chính c?a ?ng d?ng

19
Chuong trình MFC d?u tiên
các thành ph?n
  • CMainWindow l?p k? th?a t? l?p CFrameWnd
  • class CMainWindow public CFrameWnd
  • public
  • CMainWindow ()
  • protected
  • afx_msg void OnPaint ()
  • DECLARE_MESSAGE_MAP ()

20
Chuong trình MFC d?u tiên
các thành ph?n
  • CMainWindow() hàm kh?i t?o c?a s? giao di?n c?a
    ?ng d?ng, override lên hàm chu?n c?a l?p
    CFrameWnd
  • CMainWindowCMainWindow ()
  • Create (NULL, _T ("The Hello Application"))
  • OnPaint hàm thành ph?n c?a l?p CMainWindow,
    du?c g?i khi c?n c?p nh?t n?i dung c?a s?. Hàm
    này du?c d?nh nghia ch?ng lên hàm chu?n c?a l?p
    CFrameWnd.
  • void CMainWindowOnPaint ()
  • CPaintDC dc(this)
  • CRect rect
  • GetClientRect (rect)
  • dc.DrawText (_T ("Hello, MFC"), -1, rect,
    DT_SINGLELINE DT_CENTER DT_VCENTER)

21
Chuong trình MFC d?u tiên
các bu?c th?c thi ?ng d?ng
22
Chuong trình MFC d?u tiên
dang ký l?p c?a s?
23
Chuong trình MFC d?u tiên
t?o l?p c?a s?
24
Chuong trình MFC d?u tiên
Hàm l?p c?a s?
25
Chuong trình MFC d?u tiên
Hàm l?p c?a s? - tham s?
26
Chuong trình MFC d?u tiên Hàm l?p c?a
s? - các ki?u dáng c?a s?
27
Chuong trình MFC d?u tiên
Hi?n th? c?a s?
28
Chuong trình MFC d?u tiên
Vòng l?p và x? lý thông di?p
29
Chuong trình MFC d?u tiên
Message Map Ánh x? thông di?p
  • MFC dùng Message Map d? liên k?t các message v?i
    nh?ng hàm thành ph?n c?a l?p c?a s?
  • Ánh x? thông di?p là b?ng tuong quan gi?a thông
    di?p và các hàm thành ph?n qu?n lý các thông di?p
  • Ánh x? thông di?p du?c khai báo nhu các thành
    ph?n l?p khác trong khai báo l?p

class CMainWindow public CFrameWnd public CMai
nWindow () protected afx_msg void OnPaint
() DECLARE_MESSAGE_MAP ()
30
Chuong trình MFC d?u tiên
Message Map Ánh x? thông di?p
  • M?i message s? du?c x? lý b?i 1 hàm thành ph?n
    tuong ?ng
  • Nh?ng thông di?p v?i ti?n t? WM_XYZ s? du?c cài
    d?t tuong ?ng v?i hàmtheo qui t?c
  • WM_ du?c chuy?n thành On
  • XYZ du?c chuy?n thành ch? thu?ng tr? ký t? d?u
  • Ví d?
  • WM_PAINT s? du?c chuy?n thành OnPaint
  • WM_MOUSEMOVE s? du?c chuy?n thành OnMouseMove
  • WM_LBUTTONDOWN s? du?c chuy?n thành
    OnLButtonDown

31
Chuong trình MFC d?u tiên
Message Map Ánh x? thông di?p
  • Khai báo
  • Message Map

class CMainWindow public CFrameWnd
public CMainWindow () protected afx_msg
void OnPaint () afx_msg void
OnLButtonDown(UINT, CPoint) afx_msg void
OnMouseMove(UINT, CPoint) DECLARE_MESSAGE_MAP
()
BEGIN_MESSAGE_MAP (CMainWindow,
CFrameWnd) ON_WM_PAINT () ON_WM_LBUTTONDOWN() END_
MESSAGE_MAP () void CMainWindowOnPaint()
void CMainWindowOnLButtonDown(UINT nFlags,
CPoint point)
  • Cài d?t
  • x? lý Message

32
Chuong trình MFC d?u tiên
Message Map Ánh x? thông di?p
33
Chuong trình MFC d?u tiên
X? lý thêm message WM_LBUTTONDOWN
  • B? sung thêm 1 hàm thành ph?n vào khai báo c?a
    l?p CMainWindow
  • afx_msg void OnLButtonDown(UINT nFlags, CPoint
    point)
  • B? sung thêm 1 macro vào khai báo Message Map
  • ON_WM_LBUTTONDOWN ()
  • Ð?nh nghia hàm thành ph?n OnLButtonDown
  • void CMainWindowOnLButtonDown(UINT nFlags,
    CPoint point)
  • MessageBox("Left button clicked !", "Mouse",
    MB_OK)

34
T?o ?ng d?ng MFC b?ng APPWizard
  • Ch?n menu File ? New
  • Ch?n Tab Projects
  • Ch?n lo?i project MFC AppWizard (exe)
  • Ð?t tên project trong ô Project name
  • Xác d?nh du?ng d?n thu m?c trong Location
  • Step 1 Ch?n lo?i ?ng d?ng Single Document
  • Nh?n Next d?n Step 4 of 6

35
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n lo?i project MFC AppWizard (EXE)
36
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n option Single document
37
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n option None
38
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n option Next
39
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n option Next
40
T?o ?ng d?ng MFC b?ng APPWizard
Ch?n Finish
41
X? lý thông di?p chu?t
42
Message Map và ClassWizard
43
Hàm x? lý thông di?p chu?t tuong ?ng
void CMouseViewOnLButtonDown(UINT nFlags,
CPoint point) // TODO Add your message handler
code here and/or call default CViewOnLButtonDown
(nFlags, point) void CMouseViewOnLButtonUp(U
INT nFlags, CPoint point) // TODO Add your
message handler code here and/or call
default CViewOnLButtonUp(nFlags,
point) void CMouseViewOnMouseMove(UINT
nFlags, CPoint point) // TODO Add your message
handler code here and/or call default CViewOnMou
seMove(nFlags, point)
44
Hàm x? lý thông di?p chu?t tuong ?ng
void CMouseViewOnLButtonDown(UINT nFlags,
CPoint point) // TODO Add your message handler
code here and/or call default m_nStartX
point.x m_nStartY point.y CViewOnLButtonDown
(nFlags, point) void CMouseViewOnLButtonUp(U
INT nFlags, CPoint point) // TODO Add your
message handler code here and/or call
default CClientDC dc(this) dc.MoveTo(m_nStartX,m_
nStartY) dc.LineTo(point.x,point.y) CViewOnLBu
ttonUp(nFlags, point)
45
K?t qu?
46
Hàm x? lý thông di?p chu?t tuong ?ng
void CMouseViewOnLButtonDown(UINT nFlags,
CPoint point) // TODO Add your message handler
code here and/or call default m_nStartX
point.x m_nStartY point.y CViewOnLButtonDown
(nFlags, point) void CMouseViewOnMouseMove(U
INT nFlags, CPoint point) // TODO Add your
message handler code here and/or call
default CClientDC dc(this) dc.MoveTo(m_nStartX,m_
nStartY) dc.LineTo(point.x,point.y) CViewOnLBu
ttonUp(nFlags, point)
47
K?t qu?
48
X? lý Keyboard -
Thông di?p c?a keyboard
  • WM_KEYDOWN / WM_KEYUP phát sinh khi 1 phím
    (không ph?i là phím h? th?ng) du?c nh?n xu?ng/th?
    ra
  • Hàm x? lý tuong ?ng CWndOnKeyDown,
    CWndOnKeyUp
  • 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 du?c (printed
    character) dã du?c t?o ra
  • Hàm x? lý tuong ?ng CWndOnChar
  • 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,)

49
X? lý Keyboard
- Ví d?
  • 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 ? OnKeyDown
  • Ð?nh nghia hàm x? lý message WM_KEYDOWN

50
X? lý Menu

?? M?t vài khái ni?m ?? T?o l?p menu ?? Load và
hi?n th? menu ?? X? lý khi menu item du?c ch?n ??
Thay d?i tr?ng thái menu ?? Ví d?
51
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
  • Drop-down menu 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,
  • Menu item tuong ?ng v?i 1 l?nh c?a chuong
    trình. M?i menu item du?c xác d?nh b?ng 1 s?
    nguyên phân bi?t, g?i là item ID hay command ID.
  • VD. Open, Save,
  • Popup menu gi?ng nhu drop-down menu, nhung có
    th? xu?t hi?n ? v? trí b?t k? trên màn hình
    (thu?ng khi nh?n nút ph?i mouse)
  • System menu ch?a các l?nh h? th?ng di?u khi?n
    c?a s?.
  • VD. Minimize, Maximize, Close,

52
X? lý Menu - T?o l?p menu
  • Thu?ng có 2 cách chính d? t?o menu
  • T?o menu ? d?ng resource c?a ?ng d?ng, và load
    vào khi ch?y
  • T?o tr?c ti?p b?ng các hàm khi ?ng d?ng dang
    ch?y.
  • L?p s? d?ng d? qu?n lý menu CMenu
  • Các hàm thành ph?n CreateMenu, InsertMenu,

53
X? lý Menu - T?o l?p menu
File xxx.rc IDR_MAINFRAME MENU PRELOAD
DISCARDABLE BEGIN POPUP "File" BEGIN MENUITEM
"New\tCtrlN", ID_FILE_NEW MENUITEM
"Open...\tCtrlO", ID_FILE_OPEN MENUITEM
SEPARATOR MENUITEM "Exit", ID_APP_EXIT END POPU
P "Edit" BEGIN MENUITEM "Undo\tCtrlZ",
ID_EDIT_UNDO MENUITEM SEPARATOR MENUITEM
"Cut\tCtrlX", ID_EDIT_CUT MENUITEM
"Copy\tCtrlC", ID_EDIT_COPY MENUITEM
"Paste\tCtrlV", ID_EDIT_PASTE END END
54
X? lý Menu - Load và hi?n th? menu
Xác d?nh menu bar khi t?o c?a s? Create(NULL,
_T("My Application"), WS_OVERLAPPEDWINDOW,
rectDefault, NULL, MAKEINTRESOURCE(IDR_MAINFRAME))
Thay d?i menu bar CMenu menu menu.LoadMenu(ID
R_MAINFRAME) SetMenu(menu) menu.Detach()
55
Message Box
  • H?p thông báo du?c s? d?ng d? thông báo, trao
    d?i gi?a ?ng d?ng v?i ngu?i dùng
  • Ð? t?o l?p h?p thông báo, ta s? d?ng hàm
    MessageBox

CWndint MessageBox (LPCTSTR lpszText,
LPCTSTR lpszCaption
NULL, UINT nType
MB_OK)
56
Các ki?u h?p thông báo và giá tr? tr? v? tuong ?ng
Type Buttons Return Codes
MB_ABORTRETRYIGNORE Abort, Retry, Ignore IDABORT, IDRETRY, IDIGNORE
MB_OK OK IDOK
MB_OKCANCEL OK, Cancel IDOK, IDCANCEL
MB_RETRYCANCEL Retry, Cancel IDRETRY, IDCANCEL
MB_YESNO Yes, No IDYES, IDNO
MB_YESNOCANCEL Yes, No, Cancel IDYES, IDNO, IDCANCEL
57
Message Box - Ví d?
Ð? t?o l?p h?p thông báo trên ta s? d?ng hàm
MessageBox nhu sau
int nRes MessageBox (Are you sure you want to
delete these 2 items?, Confirm Multiple File
Delete, MB_YESNO)
  • Ch?n Yes ? nRes IDYES
  • Ch?n No ? nRes IDNO

58
Message Box - Ví d?
Ð? t?o l?p h?p thông báo trên ta s? d?ng hàm
MessageBox nhu sau
int nRes MessageBox (Do you want to save the
changes to Document1, Microsoft Office Word ,
MB_YESNOCANCEL)
  • Ch?n Yes ? nRes IDYES
  • Ch?n No ? nRes IDNO
  • Ch?n Cancel ? nRes IDCANCEL

59
Message Box - Các ki?u bi?u tu?ng trong h?p
thông báo
60
Message Box - Ví d?
Ð? t?o l?p h?p thông báo trên ta s? d?ng hàm
MessageBox nhu sau
int nRes MessageBox (Do you want to continue,
My Application, MB_YESNO MB_ICONQUESTION)
  • Ch?n Yes ? nRes IDYES
  • Ch?n No ? nRes IDNO

61
Message Box - Ví d?
Ð? t?o l?p h?p thông báo trên ta s? d?ng hàm
MessageBox nhu sau
int nRes MessageBox (Do you want to save the
changes to Document1 , Microsoft Office Word,
MB_YESNOCANCEL MB_ICONEXCLAMATION)
  • Ch?n Yes ? nRes IDYES
  • Ch?n No ? nRes IDNO
  • Ch?n Cancel ? nRes IDCANCEL
Write a Comment
User Comments (0)
About PowerShow.com