Professional Documents
Culture Documents
Ni dung
Gii thiu v MFC Chng trnh MFC u tin X l Mouse v Keyboard X l menu Toolbar, Statusbar Cc Control Xy dng v x l hp thoi (Dialog box) Documents v Views: Scroll view, List view, Tree view SDI Single Document Interface MDI - Multi Document Interface
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 2
MFC l g ? Mt s tnh nng ca MFC qua tng version Cc thnh phn ca 1 ng dng trong VC++ Cc mn hnh giao din chnh ca VC++ 6
Spring 2004
Gii thiu v MFC MFC l g ? Microsoft Foundation Class L mt th vin cc lp (class, OOP) trong ngn ng Visual C++, dng cho vic lp trnh trn Windows c xy dng trn c s cc hm th vin API ca Windows Version 6 c khong 200 class Gip cho ngi lp trnh c th xy dng ng dng nhanh v t tn cng sc hn so vi vic s dng n thun cc hm th vin API ca Windows Ta vn c th gi cc hm Windows API trong MFC
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 4
Trong 1 ng dng MFC, ta thng khng gi hm Windows API trc tip, m s to cc object t nhng lp ca MFC, v gi phng thc ca object a s cc phng thc ca MFC class c cng tn vi nhng hm Windows API MFC to ra mt Application Framework, gip:
Thit lp kin trc ca ng dng mt cch nht qun v khoa hc Che du i nhiu phn chi tit m Windows API i hi, gip developer thnh thi hn
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 5
Version 2:
File open, save Print preview, printing Scrolling window, Splitter window Toolbar, Statusbar Truy xut c n cc control ca VB Tr gip theo ng cnh (Context-sensitive help) DLL
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 6
Version 2.5:
H tr ODBC (Open Database Connectivity), cho php truy xut n cc CSDL Access, FoxPro, SQL Server, OLE 2.01
Version 3:
H tr tab dialog (property sheet) Docking control bar
Version 3.1:
H tr cc control chun ca Windows 95 ODBC level 2 with Access Jet database engine Cc lp Winsock phc v lp trnh TCP/IP
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 7
Version 4.0:
ADO (Data Access Object) Windows 95 docking control bar B sung thm lp TreeView v RichEdit Cc lp ng b ho cc tiu trnh
Version 4.2:
Cc lp WinInet Cc lp ActiveX document server Cc tnh nng m rng ca ActiveX control Tng cng mt s kh nng ca ODBC
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 8
Version 6:
H tr cc lp cho nhng control chun trong IE 4.0 H tr Dynamic HTML, cho php to lp ng cc trang HTML Active Document Containment, cho php ng dng MFC c th cha cc Active Document OLE DB v ADO
Spring 2004
Spring 2004
13
Spring 2004
14
ng dng n gin - To ng dng(tt) Hello.h class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; class CMainWindow : public CFrameWnd { public: CMainWindow (); protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP () };
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 16
Spring 2004
18
ng dng n gin Cc thnh phn ca c.trnh CWinApp: lp chnh ca MFC qun l ng dng. Cha ng vng lp nhn message v phn phi message n cc ca s ca ng dng CMyApp: lp k tha t lp CWinApp
class CMyApp : public CWinApp { public: virtual BOOL InitInstance (); };
CWnd: lp chnh ca MFC qun l cc loi ca s giao din. C nhiu lp c k tha t lp ny qun l cc loi ca s khc nhau (CTreeCtrl, CListBox, Cedit,) CFrameWnd: lp k tha t lp CWnd, qun l ca s giao din chnh ca ng dng CMainWindow: lp k tha t lp CFrameWnd
class CMainWindow : public CFrameWnd { public: CMainWindow (); protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP () };
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 21
OnPaint: hm thnh phn ca lp CMainWindow, c gi khi cn cp nht ni dung ca s. Hm ny c nh ngha chng ln hm chun ca lp CFrameWnd.
void CMainWindow::OnPaint () { CPaintDC dc(this); CRect rect; GetClientRect (&rect); dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE DT_CENTER DT_VCENTER); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 22
Message Map:
Lm sao x l 1 message ? MFC dng Message Map lin kt cc message vi nhng hm thnh phn ca lp ca s Mi message s c x l bi 1 hm thnh phn tng ng
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT () END_MESSAGE_MAP ()
ON_WM_PAINT l 1 macro c nh ngha trong Afxmsg_.h, mc nhin lin kt message WM_PAINT vi hm OnPaint
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 23
To ng dng bng cch s dng MFC AppWizard Cc thnh phn ca chng trnh
Spring 2004
26
Chn menu File New Chn tab Projects Chn loi project MFC AppWizard (exe) t tn project v xc nh ng dn th mc trong Location Step 1: Chn loi ng dng Dialog-based Step 2: Ch chn option 3D controls. G tiu ca ng dng vo Enter a title Step 3: chn theo ch mc nh Nhn Finish kt thc
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 27
Lp CxxxDlg:
Trong ng dng Dialog-based, ca s giao din chnh l 1 Dialog, nn ng dng dng lp CxxxDlg thay v lp CMainWindow
class CxxxDlg : public CDialog { public: CxxxDlg(CWnd* pParent = NULL); enum { IDD = IDD_xxx_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: HICON m_hIcon; virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() };
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 30
X l Mouse v Keyboard
X l mouse
Thng ip ca mouse V d: V hnh bng mouse
X l keyboard
Thng ip ca keyboard V d: X l phm nhn
Spring 2004
31
X l Mouse
Thng ip ca mouse
WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE WM_MOUSEWHEEL
Spring 2004
32
X l Mouse(tt)
Spring 2004
33
Cc bc thc hin:
nh ngha 2 bin m_PrevX, m_PrevY trong class CxxxDlg nh ngha hm x l message WM_LBUTTONDOWN trong class CxxxDlg nh ngha hm x l message WM_MOUSEMOVE trong class CxxxDlg
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 34
Spring 2004
35
X l Mouse(tt)
X l keyboard(tt)
V d: X l phm nhn
M t: khi user nhn mt phm MessageBox thng bo Cc x l cn thit
WM_KEYDOWN OnKeyDown
hin th 1
Cc bc thc hin
nh ngha hm x l message WM_KEYDOWN trong class CxxxDlg
Spring 2004
38
X l menu Mt vi khi nim To lp menu Load v hin th menu X l khi menu item c chn Thay i trng thi menu V d
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 39
X l menu - Mt vi khi nim Menu bar: thanh menu. Bao gm nhiu drop-down menu v menu item Drop-down menu: mt phn ca menu bar, cha cc menu item hoc cc drop-down menu khc. VD. File, Edit, Menu item: tng ng vi 1 lnh ca chng trnh. Mi menu item c xc nh bng 1 s nguyn phn bit, gi l item ID hay command ID. VD. Open, Save, Popup menu: ging nh drop-down menu, nhng c th xut hin v tr bt k trn mn hnh (thng khi nhn nt phi mouse) System menu: cha cc lnh h thng iu khin ca s. VD. Minimize, Maximize, Close,
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 40
X l menu - To lp menu
Spring 2004
41
X l menu - To lp menu(tt)
xxx.rc
IDR_MAINFRAME 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
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 42
X l menu - Load v hin th menu(tt) MAKEINTRESOURCE: macro dng chuyn i 1 s nguyn (resource ID) thnh dng LPSTR CMenu::LoadMenu: load 1 resource menu bar v gn vo i tng CMenu CWnd::SetMenu: gn menu bar cho 1 ca s CMenu::Detach: g b menu bar ra khi i tng CMenu, menu bar khng b hu b cng vi i tng CMenu khi ra khi phm vi khai bo
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 44
Spring 2004
45
Cc thng ip ca menu:
WM_MENUSELECT: pht sinh khi user tc ng ln menu. Thng ip ny c th dng cp nht trng thi ca menu (trng hp menu thay i theo ng cnh Context-sensitive Menu)
Hm x l tng ng: CWnd::OnMenuSelect wParam:
LOWORD(wParam): ID ca menu item hoc index ca menu popup HIWORD(wParam): cc thng tin khc (trng thi menu, loi menu, )
lParam:
NULL nu message ny pht sinh t menu Nu message pht sinh t 1 control, lParam s cha handle ca control
Spring 2004
47
Spring 2004
50
Spring 2004
51
Cch x l
void CMainFrame::OnDraw(UINT nID) { CMenu* pMenu = GetMenu(); pMenu->CheckMenuItem(m_nCurrentDraw,MF_UNCHECKED);
m_nCurrentDraw = nID;
pMenu->CheckMenuItem(m_nCurrentDraw, MF_CHECKED); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 52
X l menu V d
To 1 ng dng SDI
Chn menu File New Chn tab Projects Chn loi project MFC AppWizard (exe) t tn project v xc nh ng dn th mc trong Location Step 1: Chn loi ng dng Single Document, b option Document/View architecture support Nhn Finish kt thc
Spring 2004
53
X l menu V d(tt)
Spring 2004
54
X l menu V d(tt)
Spring 2004
55
Vit hm x l
void CMainFrame::OnDraw(UINT nID) { CMenu* pMenu = GetMenu(); pMenu->CheckMenuItem(m_nCurrentDraw, MF_UNCHECKED); m_nCurrentDraw = nID; pMenu->CheckMenuItem(m_nCurrentDraw, MF_CHECKED); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 57
Toolbar
Spring 2004
58
Spring 2004
62
To lp v hin th:
Bc 1: thit k DrawToolBar bng RC editor, bao gm cc chc nng: Line, Circle, Rectangle, c ID l IDR_DRAWTOOLBAR
CToolBar
m_wndDrawToolBar;
Spring 2004 63
FlyBy text l 1 cu thng bo c hin th trn StatusBar khi user di chuyn mouse n 1 button ca ToolBar
Spring 2004
66
Statusbar
Spring 2004
68
To lp v hin th n/hin Statusbar Th hin gip cho cc menu item Phn vng trn Statusbar
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 72