You are on page 1of 36

Lp trnh C trn Windows

K thut lp trnh Visual C++ (MFC)


Nguyn Tri Tun Khoa CNTT H.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn

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

Gii thiu v MFC

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

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

Gii thiu v MFC MFC l g ?(tt)

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

Gii thiu v MFC - Mt s tnh nng ca MFC Version 1:


Cc lp List, Array, String, Time, Date, File access, Cc lp giao din c bn MDI, OLE 1.0

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

Gii thiu v MFC - Mt s tnh nng ca MFC(tt)

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

Gii thiu v MFC - Mt s tnh nng ca MFC(tt)

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

Gii thiu v MFC - Mt s tnh nng ca MFC(tt)

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

Gii thiu v MFC - Cc thnh phn ca 1 ng dng

S bin dch cc thnh phn ca 1 ng dng trong VC++


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 10

Gii thiu v MFC - Cc mn hnh giao din chnh

Cc thnh phn giao din chnh ca VC++


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 11

Gii thiu v MFC - Cc mn hnh giao din chnh(tt)

Cc thnh phn giao din chnh ca VC++ (run-time)


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 12

Chng trnh MFC u tin

ng dng n gin dng Application Framework ng dng phc tp hn (Dialog-based App)

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

13

Chng trnh MFC u tin - ng dng n gin

To ng dng Cc thnh phn ca chng trnh

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

14

ng dng n gin - To ng dng


Chn menu File New Chn tab Projects Chn loi project Win32 Application t tn project v xc nh ng dn th mc trong Location Step 1: Chn loi ng dng An empty project Nhn Finish kt thc Add cc file Hello.h v Hello.cpp vo project Chn menu Project Settings Chn project trong ca s bn tri Chn tab General Chn Use MFC In A Shared DLL
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 15

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

ng dng n gin - To ng dng(tt) Hello.cpp


#include <afxwin.h> #include "Hello.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp member functions BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT () END_MESSAGE_MAP ()
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 17

ng dng n gin - To ng dng(tt) Hello.cpp(tt)


CMainWindow::CMainWindow () { Create (NULL, _T ("The Hello Application")); } 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

18

ng dng n gin - To ng dng(tt)

ng dng MFC n gin


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 19

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

InitInstance(): hm khi to ng dng, override ln hm chun ca lp CWinApp


BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 20

ng dng n gin Cc thnh phn ca c.trnh(tt)

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

ng dng n gin Cc thnh phn ca c.trnh(tt)


CMainWindow(): hm khi to ca s giao din ca ng dng, override ln hm chun ca lp CFrameWnd
CMainWindow::CMainWindow () { Create (NULL, _T ("The Hello Application")); }

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

ng dng n gin Cc thnh phn ca c.trnh(tt)

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

ng dng n gin Cc thnh phn ca c.trnh(tt)

X l thm message WM_LBUTTONDOWN


B sung thm 1 hm thnh phn vo khai bo ca lp CMainWindow:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

B sung thm 1 macro vo khai bo Message Map:


ON_WM_LBUTTONDOWN ()

nh ngha hm thnh phn OnLButtonDown:


void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point) { MessageBox("Left button clicked !", "Mouse", MB_OK); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 24

ng dng n gin Cc thnh phn ca c.trnh(tt)

X l thm message WM_MOUSELEAVE


B sung thm 1 hm thnh phn vo khai bo ca lp CMainWindow:
afx_msg LRESULT OnMouseLeave();

B sung thm 1 macro vo khai bo Message Map:


ON_MESSAGE (WM_MOUSELEAVE, OnMouseLeave)

nh ngha hm thnh phn OnLButtonDown:


LRESULT CMainWindow::OnMouseLeave() { MessageBox("Mouse leaved !", "Mouse", MB_OK); return 0; }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 25

Chng trnh MFC u tin Dialog-based App

To ng dng bng cch s dng MFC AppWizard Cc thnh phn ca chng trnh

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

26

Dialog-based App - To ng dng bng MFC AppWizard

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

Dialog-based App - To ng dng bng MFC AppWizard(tt)

ng dng MFC (Dialog-based)


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 28

Dialog-based App - Cc thnh phn ca chng trnh

Cc file chng trnh: (xxx l tn project)


xxx.h: header file ca file xxx.cpp, cha khai bo lp CxxxApp qun l ton b ng dng. Lp CxxxApp k tha t lp CWinApp ca MFC xxxDlg.h: header file ca file xxxDlg.cpp, cha khai bo lp CxxxDlg qun l ca s Dialog giao din ca ng dng. Lp CxxxDlg k tha t lp CDialog ca MFC Resource.h: header file, cha cc hng ID ca cc resource c nh ngha trong file xxx.rc xxxDlg.cpp: ci t cc hm thnh phn ca lp CxxxDlg xxx.cpp: ci t cc hm thnh phn ca lp CxxxApp xxx.rc: m t cc resource (ti nguyn) ca ng dng
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 29

Dialog b - ased App- Cc thnh phn ca chng trnh(tt)

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

32

X l Mouse(tt)

Thng ip ca mouse (tt)


Vi mi thng ip ca mouse, Windows gi km 2 tham s wParam v lParam wParam: cho bit phm no ang c nhn (Ctrl, Shift) lParam: cho bit to hin ti
LOWORD(lParam): ta x HIWORD(lParam): ta y

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

33

X l Mouse(tt) V d: V hnh bng mouse


M t: khi user nhn gi nt tri chut & di chuyn 1 ng thng Cc x l cn thit:
WM_LBUTTONDOWN OnLButtonDown WM_MOUSEMOVE OnMouseMove

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

X l Mouse(tt) V hnh bng mouse(tt)


void CxxxDlg::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); }

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

35

X l Mouse(tt)

V hnh bng mouse(tt)


void CxxxDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { // Get the Device Context CClientDC dc(this); // Draw a line from the prev point to current point dc.MoveTo(m_StartX, m_StartY); dc.LineTo(point.x, point.y); // Save the current point as the previous point m_PrevX = point.x; m_PrevY = point.y; } CDialog::OnMouseMove(nFlags, point); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 36

X l keyboard Thng ip ca keyboard


WM_KEYDOWN / WM_KEYUP: pht sinh khi 1 phm (khng phi l phm h thng) c nhn xung/th ra
Hm x l tng ng: CWnd::OnKeyDown, CWnd::OnKeyUp wParam: virtual-key code lParam: cha cc thng tin khc (s ln lp li phm, scan code, extended key,)

WM_CHAR: l kt qu pht sinh do message WM_KEYDOWN, bo hiu 1 k t in c (printed character) c to ra


Hm x l tng ng: CWnd::OnChar wParam: m k t lParam: cha cc thng tin khc (s ln lp li do nhn gi phm, c phm Alt nhn km,)
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 37

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

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

Thng c 2 cch chnh to menu:


To menu dng resource ca ng dng, v load vo khi chy To trc tip bng cc hm khi ng dng ang chy.
Lp s dng qun l menu: CMenu Cc hm thnh phn: CreateMenu, InsertMenu,

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

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

Xc nh menu bar khi to ca s:


Create(NULL, _T("My Application"), WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MAINFRAME));

Thay i menu bar:


CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach();
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 43

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

X l menu - X l khi menu item c chn

Cc thng ip ca menu X l lnh ca menu item Nhm lnh (Command range)

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

45

X l menu - X l khi menu item c chn(tt)

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: handle ca menu


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 46

X l menu - X l khi menu item c chn(tt)

Cc thng ip ca menu: (tt)


WM_COMMAND: pht sinh khi user chn 1 menu item
Hm x l tng ng: CWnd::OnCommand wParam:
LOWORD(wParam): ID ca menu item hoc ca control HIWORD(wParam): ngun gc pht sinh, 1 nu sinh ra do 1 phm tt; 0 nu chn trc tip t menu

lParam:
NULL nu message ny pht sinh t menu Nu message pht sinh t 1 control, lParam s cha handle ca control

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

47

X l menu - X l khi menu item c chn(tt) X l lnh ca menu item


Da trn message WM_COMMAND nh ngha message map
ON_COMMAND (ID_FILE_OPEN, OnMyFileOpen) ON_COMMAND (ID_FILE_EXIT, OnMyFileExit)

Vit hm thnh phn x l cho menu item tng ng


void CMainFrame::OnMyFileOpen () { // Thc hin thao tc m file } void CMainFrame::OnMyFileExit () { PostMessage (WM_CLOSE, 0, 0); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 48

X l menu - X l khi menu item c chn(tt)

Nhm lnh (Command range)


L 1 nhm menu item hot ng theo nguyn tc Ch c 1 phn t c chn ti 1 thi im VD. Chc nng v hnh Line / Circle / Rectangle Cch thc x l ?
Cch 1: map tt c x l ca cc menu item ny vo chung 1 hm x l Cch 2: dng macro ON_COMMAND_RANGE
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 49

X l menu - X l khi menu item c chn(tt)

Nhm lnh (Command range) (tt)


Cch 1: map tt c x l ca cc menu item ny vo chung 1 hm x l
// nh ngha Message map ON_COMMAND (ID_DRAW_LINE, OnDraw) ON_COMMAND (ID_DRAW_CIRCLE, OnDraw) ON_COMMAND (ID_DRAW_RECTANGLE, OnDraw) // Hm x l chung, xc nh item hin hnh void CMainFrame::OnDraw () { m_nCurrentDraw = (UINT) LOWORD(GetCurrentMessage()->wParam); }

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

50

X l menu - X l khi menu item c chn(tt)

Nhm lnh (Command range) (tt)


Cch 2: dng macro ON_COMMAND_RANGE
// nh ngha Message map ON_COMMAND_RANGE (ID_DRAW_LINE, ID_DRAW_RECTANGLE, OnDraw) // Hm x l chung, xc nh item hin hnh void CMainFrame::OnDraw (UINT nID) { m_nCurrentDraw = nID; }

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

51

X l menu - Thay i trng thi menu Cc v d:


Khi user chn chc nng v Circle cn th hin 1 du check ( ) pha trc Chc nng Cut/Copy/Delete ch c kch hot khi user nh du chn 1 on text Chc nng Paste ch c kch hot khi clipboard khc rng ...

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

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

53

X l menu V d(tt)

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

54

X l menu V d(tt)

X l lnh ca menu item


V thm vo menu popup File cc item: New, Open, Save nh ngha Message Map cho cc hm x l item
ON_COMMAND(ID_FILE_NEW, OnFileNew) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_SAVE, OnFileSave)

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

55

X l menu V d(tt) X l lnh ca menu item (tt)


Vit x l lnh cho tng item
void CMainFrame::OnFileNew() { // TODO: Add your command handler code here MessageBox("Ban vua chon item New", File"); } void CMainFrame::OnFileOpen() { // TODO: Add your command handler code here MessageBox("Ban vua chon item Open", File"); } void CMainFrame::OnFileSave() { // TODO: Add your command handler code here MessageBox("Ban vua chon item Save", File"); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 56

X l menu V d(tt) X l chn nhm lnh


V thm menu popup Draw vi cc item: Line, Circle, Rectangle nh ngha message map
ON_COMMAND_RANGE (ID_DRAW_LINE, ID_DRAW_RECTANGLE, OnDraw)

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

To mt ng dng c Toolbar bng AppWizard To Toolbar bng lp CToolBar

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

58

Toolbar - To mt ng dng bng AppWizard

To mt ng dng c Toolbar bng AppWizard


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
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 59

Toolbar - To mt ng dng bng AppWizard(tt)

Chn option ny AppWizard t ng to ra mt Docking Toolbar


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 60

Toolbar - To mt ng dng bng AppWizard(tt) Cc x l trong hm OnCreate ca lp CMainFrame


if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } // Xc nh thuc tnh Docking m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar);
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 61

Toolbar - To Toolbar bng lp CToolBar

To lp v hin th n/hin thanh ToolBar Thm cc ToolTip v FlyBy text

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

62

Toolbar - To Toolbar bng lp CToolBar(tt)

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

Bc 2: trong class CMainFrame, nh ngha bin qun l DrawToolBar


// class CMainFrame

CToolBar

m_wndDrawToolBar;
Spring 2004 63

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Toolbar - To Toolbar bng lp CToolBar(tt)


Bc 3: trong hm OnCreate ca lp CMainFrame, vit lnh to lp DrawToolBar
// Trong hm CMainFrame::OnCreate if (!m_wndDrawToolBar.Create(this) || !m_wndDrawToolBar.LoadToolBar(IDR_DRAWTOOLBAR)) { TRACE0(Khong the tao duoc DrawToolBat\n"); return -1; } // Xc nh tnh cht ca ToolBar m_wndDrawToolBar.SetBarStyle( m_wndDrawToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // Xc nh tnh cht Docking m_wndDrawToolBar.EnableDocking(CBRS_ALIGN_ANY); // Docking toolbar DockControlBar(&m_wndDrawToolBar);
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 64

Toolbar - To Toolbar bng lp CToolBar(tt) n/hin thanh ToolBar


Cch thc hin:
Thm 1 menu item mi vo menu popup View, vi ID l ID_VIEW_DRAWTOOLBAR Vit hm x l cho menu item ny void CMainFrame::OnViewDrawtoolbar() { // TODO: Add your command handler code here BOOL bVisible = m_wndDrawToolBar.GetStyle() & WS_VISIBLE; ShowControlBar(&m_wndDrawToolBar, !bVisible, FALSE); CMenu* pMenu = GetMenu(); pMenu->CheckMenuItem(ID_VIEW_DRAWTOOLBAR, (!bVisible==1) ? MF_CHECKED : MF_UNCHECKED); }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 65

Toolbar - To Toolbar bng lp CToolBar(tt)

Thm cc ToolTip v FlyBy text


ToolTip l 1 ca s nh cha cu gii thch ngn v cng dng ca 1 button trn ToolBar

FlyBy text l 1 cu thng bo c hin th trn StatusBar khi user di chuyn mouse n 1 button ca ToolBar

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

66

Toolbar - To Toolbar bng lp CToolBar(tt)

Thm cc ToolTip v FlyBy text (tt)


Cch thc hin:
ToolBar phi c thuc tnh CBRS_TOOLTIPS CBRS_FLYBY To 1 bng m t chui (StringTable) ID ca chui trng vi ID ca cc button trn ToolBar Chui c th gm 2 phn:
<FlyBy Text>\n<ToolTip> VD. STRINGTABLE DISCARDABLE BEGIN ID_DRAW_LINE "Draw a line\nLine ID_DRAW_CIRCLE "Draw a circle\nCircle" ID_DRAW_RECTANGLE "Draw a rect\nRectangle" END
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 67

Statusbar

To mt ng dng c Statusbar bng AppWizard To Statusbar bng lp CStatusBar

C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM

Spring 2004

68

Statusbar - To mt ng dng bng AppWizard

To mt ng dng c Statusbar bng AppWizard


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
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 69

Statusbar - To mt ng dng bng AppWizard(tt)

Chn option ny AppWizard t ng to ra mt Statusbar


C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 70

Statusbar - To mt ng dng bng AppWizard(tt)


Cc x l tng ng
// nh ngha cc vng trn Statusbar // (file MainFrm.cpp) static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // To lp Statusbar (hm OnCreate ca lp CMainFrame) if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0(Khng th to c Statusbar\n"); return -1; // fail to create }
C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 71

Statusbar - To Statusbar bng lp CStatusBar

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

You might also like